字符* 字符串到十六进制 C 中的参数
char* string to hex arrary in C
我有char * para.mac
,字符串c8934641d0b7
存储在其中。
我想将其转换为十六进制数组int m[6]
,做
m[0]=0xc8;
m[1]=0x93;
...
m[5]=0xb7;
我试图用:
int i;
int m[6];
sscanf(para.mac, "%x%x%x%x%x%x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);
for(i=0;i<6;i++)
printf("%i rn",m[i]);
但它似乎不起作用。
我不知道为什么结果显示给我:
1178718391
0
0
134448233
8
134272063
我认为应该是
200(0xc8)
147(0x93)
70(0x46)
65(0x41)
208(0xd0)
183(0xb7)
那么问题出在哪里呢?
如果我
没记错的话,你走在正确的轨道上。
考虑尝试:"%2x%2x%2x%2x%2x%2x"
,这意味着每个十六进制数字最多只消耗 2 个字符。
您在sscanf
函数中使用的唯一 %x。
sscanf(buf, "%x%x%x%x%x%x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);
这将只得到十六进制的字符。但是转换它应该需要两个字符。您可以像这样更改sscanf
函数:
sscanf(buf, "%2x%2x%2x%2x%2x%2x", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);
现在根据您的字符串:c8934641d0b7
第一个 %2x 将得到c8
,第二个 %2x 将得到93
,第三个将得到46
第四将得到41
第五个将得到d0
,最后第五个将得到b7
。
所以它现在可以正常工作。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 将十六进制数作为主要函数参数
- 字符* 字符串到十六进制 C 中的参数
- 从命令行以十六进制形式输入参数
- 从命令行输入参数为带 N 字节的十六进制
- 试图输出命令行参数会产生一个看似随机的十六进制数
- C++,带有十六进制参数的sprintf
- 传递参数时出错,并将其转换为十六进制