我正在尝试创建一个与实际十六进制值相对应的十六进制转义序列。
我从来没有真正使用过十六进制转义序列,但作为第一次尝试,我想创建十六进制值:0x12345678
我需要以下内容吗?:
hex_value = "\x30\x78\x31\x32\x33\x34\x35\x36\x37\x38"
我在这里找到了字符的十六进制值:http ://www.asciitable.com/
我正在尝试创建一个与实际十六进制值相对应的十六进制转义序列。
我从来没有真正使用过十六进制转义序列,但作为第一次尝试,我想创建十六进制值:0x12345678
我需要以下内容吗?:
hex_value = "\x30\x78\x31\x32\x33\x34\x35\x36\x37\x38"
我在这里找到了字符的十六进制值:http ://www.asciitable.com/
至少有两种方法可以创建十六进制值的字符串。
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;
}