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 に答える