事情就是这样,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";
字符串中的反斜杠太多。
试试这个:
#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";
会很乐意做你的工作。:-)