我不知道那是什么,我在openSSL源代码中找到了这个。
那些字节序列是什么?基本上我只需要将char *
转换为那种样式作为参数。
答案 0 :(得分:1)
它是十六进制的字节序列。 \x6d\xe3\x85
是十六进制字符6d
,后跟十六进制e3
,后跟十六进制85
。语法为\xnn
,其中 nn 是您的十六进制序列。
答案 1 :(得分:0)
\x
序列用于以十六进制表示法转义字节值。因此,您引用的序列会转义字节6D
,E3
和85
,它们会转换为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
$
*/