如何使用十六进制表示法为char *赋值?

时间:2010-03-10 21:31:52

标签: c

我通常以下列方式使用指针

    char *ptr = malloc( sizeof(char) * 100 );
    memset( ptr, 0, 100 ) ;
    strncpy( ptr, "cat" , 100 - 1 );

但是这次不是使用“cat”,而是想用十六进制的ASCII等效语法。

  

cat = 0x63,0x61,0x74,0x00

我试过

    strncpy( ptr, "0x630x61" , 100 - 1 );

但它失败了。

正确的语法是什么?

我还需要放一个0x00吗?暂时让我们忘记memset,现在我需要放一个0x00吗?因为在“cat”表示法中,会自动放置null。

此致

3 个答案:

答案 0 :(得分:13)

\xXX是以十六进制格式插入字符的语法。所以你的是:

strncpy( ptr, "\x63\x61\x74", 100 - 1);

您不需要输入\x00,因为引号会自动为空字符串分隔字符串。

答案 1 :(得分:4)

注意,你只需要在“”字符串

char cat[4];
cat[0] = 0x63;
cat[1] = 0x61;
cat[2] = 0x74;
car[3] = 0x00;

char cat[] = "\x63\x61\x74"; // note the \0 is added for you

char cat[] = { 0x63, 0x61, 0x74, 0x00 };

都是一样的

答案 2 :(得分:2)

strncpy( ptr, "\x63\x61" , 100 - 1 );

0x63是一个整数十六进制文字; C编译器在代码中解析它。但在字符串中,它被解释为一系列字符0,x,6,3。 值为63十六进制的char的文字。是'\x63',在字符串中,您必须使用此表示法。 "c\x63"零终止字符串的文字,无论引号中的字符(或表示它们的符号)都是如此,所以不,你不需要手动附加尾随零。