Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
很抱歉试图用另一种方式问这个问题。
如何将67770值提取到一个int变量中?
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
很抱歉试图用另一种方式问这个问题。
typedef struct
{
char duo_word[8];
} duo_word;
duo_word duo_word_inst = { .duo_word = { 'º', '\b', '\x1', '\0', 'À', '\xe', '2', 'a' } };
printf(" %i ", duo_word_inst); // gives 67770 but how?
如何将67770值提取到一个int变量中?
最佳答案
%i
格式说明符toprintf
需要一个int
作为其参数。但是,您要传递一个duo_word
。使用错误的格式说明符调用undefined behavior。在这种情况下,你是“幸运的”它碰巧打印你想要的,但你不能依赖于这种行为。
假设结构中的前4个字节以小尾数格式表示32位整数,则可以提取单个字节并将其设置为整数,如下所示:
unsigned int value = 0;
value |= (unsigned char)duo_word_inst.duo_word[0];
value |= (unsigned char)duo_word_inst.duo_word[1] << 8;
value |= (unsigned char)duo_word_inst.duo_word[2] << 16;
value |= (unsigned char)duo_word_inst.duo_word[3] << 24;
关于c - 在这种情况下,printf%i如何工作? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50822142/
10-11 20:46