我尝试创建一个与实际十六进制值对应的十六进制转义序列。
我从未真正使用十六进制转义序列,但作为第一次尝试,我想创建十六进制值:0x12345678
我需要以下内容吗?:
hex_value = "\x30\x78\x31\x32\x33\x34\x35\x36\x37\x38"
我在这里找到了字符的十六进制值:http://www.asciitable.com/
答案 0 :(得分:0)
至少有两种方法可以创建十六进制值字符串。
char a[] = { 0x12, 0x34, 0x56, 0x78, 0 };
char *aa = "\x12\x34\x56\x78";
请注意,您在裸号上使用0x
,在字符串中使用\x
。
现在,a
数组的前4个字节可能对应于32位整数值0x12345678,也可能不对应。它将在“big-endian”系统上完成,但不会在“little-endian”系统上(字节将被反转)。因为在存储器中如何排列多字节整数有不同的约定。甚至有奇怪的系统,其中两个单词使用一个约定排序,单词中的两个字节使用另一个排序(我忘记了哪个系统,我忘了组合是什么)。
如果在目标系统上编译并运行,该程序将为给定的整数输出适当的十六进制转义序列。
#include <stdio.h>
int main() {
int i = 0x12345678;
unsigned char *p = (void *)&i;
printf("\\x%2x\\x%2x\\x%2x\\x%2x\n", p[0], p[1], p[2], p[3]);
return 0;
}