转义十六进制序列

时间:2013-03-16 04:26:45

标签: c hex ascii

我尝试创建一个与实际十六进制值对应的十六进制转义序列。

我从未真正使用十六进制转义序列,但作为第一次尝试,我想创建十六进制值:0x12345678

我需要以下内容吗?:

hex_value = "\x30\x78\x31\x32\x33\x34\x35\x36\x37\x38"

我在这里找到了字符的十六进制值:http://www.asciitable.com/

1 个答案:

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