我从命令行"13:22:45:33:99:cd"
读取一个17字节的十六进制字符串,并希望将其转换为长度为6字节的二进制值。
为此,我从命令行"13:22:45:33:99:cd"
读取一个17字节的十六进制字符串,并将其转换为二进制数字0001 0011 0010 0010 0100 0101 0011 0011 1001 1001 1100 1101
。但是,由于我使用的是char数组,因此长度为48个字节。我希望得到的二进制文件长度为6个字节,即我希望0001 0011 0010 0010 0100 0101 0011 0011 1001 1001 1100 1101
为6个字节(48位)而不是48个字节。请建议如何做到这一点。
答案 0 :(得分:3)
#include <stdio.h>
const char *input = "13:22:45:33:99:cd";
int output[6];
unsigned char result[6];
if (6 == sscanf(input, "%02x:%02x:%02x:%02x:%02x:%02x",
&output[0], &output[1], &output[2],
&output[3], &output[4], &output[5])) {
for (int i = 0; i < 6; i++)
result[i] = output[i];
} else {
whine("something's wrong with the input!");
}
答案 1 :(得分:2)
在':'
字符上拆分字符串,每个子字符串现在都是一个可以传递给它的字符串,例如strtoul
然后放入一个大小为6的unsigned char
数组。
答案 2 :(得分:1)
你把它们打包在一起。像低半字节的高半字节:(hi<<4)|lo
(假设两者都是4位)。
虽然您可能更喜欢逐字节转换它们,而不是首先逐位转换它们。