3

事情就是这样,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呢?

4

3 回答 3

8

因为你逃了\。摆脱它们:

const char *str = "\x00\x4\x00\x00";
于 2012-09-25T13:17:28.127 回答
4

字符串中的反斜杠太多。

试试这个:

#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
于 2012-09-25T13:18:01.557 回答
1

你知道当你在任何 printf 语句的末尾输入一个换行符时会发生什么,即\n“\”部分被称为转义斜杠。这就是为什么\n没有被打印出来。同样,如果你给"\\x00\\x4\\x00\\x00",这意味着\x00\x4\x00\x00将被存储,这显然没有任何意义。所以,你必须摆脱那些\ (这些斜线)。因此,

const char *str = "\x00\x4\x00\x00";

会很乐意做你的工作。:-)

于 2012-09-25T13:25:40.897 回答