48字节二进制到6字节二进制

时间:2012-10-12 08:26:05

标签: c binary hex bytearray byte

我从命令行"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个字节。请建议如何做到这一点。

3 个答案:

答案 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位)。

虽然您可能更喜欢逐字节转换它们,而不是首先逐位转换它们。