以下是需要翻译的内容:
事情是这样的,1024 = 0x400
,我假设它的二进制表示(小端)是\\x00\\x4\\x00\\x00
。我试图做这样的事情:
int main()
{
const char *str = "\\x00\\x4\\x00\\x00";
const int *p = (const int *)str;
printf("%d\n", *p);
}
但为什么上述代码不能返回
1024
呢?因为你转义了 \
。请将它们还原:
const char *str = "\x00\x4\x00\x00";
printf "\\x00\\x4\\x00\\x00"
жҗһзіҠж¶ӮдәҶгҖӮ - Alcottbash
首先取消转义字符串,然后进行处理。虽然我不确定这个 printf 是否会产生 1024
… - Michael Krelin - hackerprintf '\x00\x4\x00\x00'
也会给我返回1024
,所以我猜我不应该使用“\”。 - Alcott您的字符串中有过多的反斜杠。
请尝试使用以下方式:
#include <stdio.h>
int main(void)
{
const char *str = "\x00\x4\x00\x00";
const int *p = (const int *)str;
printf("%d\n", *p);
return 0;
}
在ideone的输出:
1024
你知道在任何printf语句的末尾输入换行符\n会发生什么吗?其中"\"部分被称为转义斜杠。这就是为什么\n不会被打印出来的原因。同样的,如果你输入"\\x00\\x4\\x00\\x00",它意味着\x00\x4\x00\x00将被存储,这显然没有任何意义。所以,你必须摆脱那些\(这些斜杠)。因此,
const char *str = "\x00\x4\x00\x00";
我很乐意为您完成工作。 :-)
p
绝对不是指向int
的指针,因此这是纯粹的未定义行为。至少你应该检查大小! - Kerrek SBprintf "\\x00\\x4\\x00\\x00"
给我输出了1024
。 - Alcottprintf
得到的 1024 表示。 - Michael Krelin - hacker