代码之家  ›  专栏  ›  技术社区  ›  Andrew-Dufresne

如何使用十六进制符号给char*赋值?

c
  •  7
  • Andrew-Dufresne  · 技术社区  · 16 年前

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

        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”符号中,会自动放置一个空值。

    当做

    3 回复  |  直到 15 年前
        1
  •  13
  •   Claudiu    16 年前

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

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

    你不需要加入 \x00 因为引号自动空分隔字符串。

        2
  •  4
  •   Martin Beckett    16 年前

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

    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 };
    

    都一样吗

        3
  •  2
  •   Federico A. Ramponi    16 年前
    strncpy( ptr, "\x63\x61" , 100 - 1 );
    

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