Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 转义十六进制序列_C_Hex_Ascii - Fatal编程技术网

C 转义十六进制序列

C 转义十六进制序列,c,hex,ascii,C,Hex,Ascii,我试图创建一个十六进制转义序列,它将对应于一个实际的十六进制值 我从未真正使用过十六进制转义序列,但作为第一次尝试,我想创建十六进制值:0x12345678 我需要下列物品吗 hex_value = "\x30\x78\x31\x32\x33\x34\x35\x36\x37\x38" 我在这里找到了字符的十六进制值:至少有两种方法可以创建十六进制值字符串 char a[] = { 0x12, 0x34, 0x56, 0x78, 0 }; char *aa = "\x12\x34\x56\x78

我试图创建一个十六进制转义序列,它将对应于一个实际的十六进制值

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

我需要下列物品吗

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

我在这里找到了字符的十六进制值:

至少有两种方法可以创建十六进制值字符串

char a[] = { 0x12, 0x34, 0x56, 0x78, 0 };
char *aa = "\x12\x34\x56\x78";
请注意,您对空数字使用
0x
,对字符串使用
\x

现在,
数组的前4个字节可能对应于32位整数值0x12345678,也可能不对应于32位整数值0x12345678。它将在“大端”系统上执行此操作,但在“小端”系统上不执行此操作(在该系统中,字节将被反转)。因为多字节整数在内存中的排列方式有不同的约定。甚至还有一些奇怪的系统,其中两个单词使用一种约定进行排序,单词中的两个字节使用另一种约定进行排序(我忘了是哪种系统,也忘了组合是什么)

如果编译并在目标系统上运行,该程序将为给定整数输出适当的十六进制转义序列

#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;
}
#包括
int main(){
int i=0x12345678;
无符号字符*p=(void*)&i;
printf(“\\x%2x\\x%2x\\x%2x\\x%2x\n”,p[0],p[1],p[2],p[3]);
返回0;
}

“\x78\x56\x34\x12”
(如果是小尾端)。如果它是一个字符串,我是否需要在其余值之前加上“0x”才能将其作为十六进制值处理?
0x
是编译器识别十六进制数序列的前缀。这与此处无关,因为您正在处理字节,当组合在一起时会创建一个数字的表示形式。如果您试图将内存类型转换为大于8位的整数,请注意尾数问题。如果您希望它是一个实际字符串,请不要忘了在第一个实例中终止0!