\ x6d \ xe3 \ x85是什么意思?

时间:2011-12-28 17:04:23

标签: c openssl byte

我不知道那是什么,我在openSSL源代码中找到了这个。

那些字节序列是什么?基本上我只需要将char *转换为那种样式作为参数。

4 个答案:

答案 0 :(得分:1)

它是十六进制的字节序列。 \x6d\xe3\x85是十六进制字符6d,后跟十六进制e3,后跟十六进制85。语法为\xnn,其中 nn 是您的十六进制序列。

答案 1 :(得分:0)

\x序列用于以十六进制表示法转义字节值。因此,您引用的序列会转义字节6DE385,它们会转换为109,227和133.而6D也可以表示为字符{ {1}}在ASCII中,您不能用ASCII表示后两个,因为它只覆盖范围0..127。因此,对于超过127的值,您需要一种特殊的方式来编写它们,m就是这样。

另一种方法是使用\x以八进制数转义,例如109为\<number>

如果您需要显式字节值,最好使用这些转义序列,因为(AFAIK)C标准不保证您的字符串将使用ASCII编码。因此,当您在EBCDIC系统上编译时,\155将表示为字节值148而不是109。

答案 2 :(得分:0)

如果你读到的是

char foo[] = "\x6d\xe3\x85";

然后与

相同
char foo[] = { 0x6d, 0xE3, 0x85, 0x00 };

此外,我可以告诉您0x6D'm'的ASCII代码点,0xE3'ã'的ISO 8859.1代码点,0x85 }是'…'的Windows-1252代码点。

但是在不了解更多关于上下文的情况下,我不能告诉你如何“将[你的] char *转换为那种风格作为参数”,除了说你可能根本不需要进行任何转换! \x表示法允许您将包含任意字节序列的字符串常量写入源代码。如果程序中的缓冲区中已有任意字节序列,我无法想象在将其提供给OpenSSL之前需要将其反转换为\x表示法。

答案 3 :(得分:0)

尝试使用以下代码段来了解有关十六进制字节序列的更多信息。

#include <stdio.h>

int main(void)
{
    char word[]="\x48\x65\x6c\x6c\x6f"; 
    printf("%s\n", word);

    return 0;
}

/*
Output:
$
$ ./a.out
Hello
$
*/