结构到u_char转换

时间:2014-05-10 00:50:35

标签: c++ struct unsigned-char

让我们说我有一些类似的结构:

struct a {
    uint8_t v1[6];
    uint16_t type;
    uint8_t v2[6];
    uint32_t something_long;
};

struct b {
    uint8_t v3;
    uint8_t v4;
};

struct c{
    a a;
    b b;
}

我填写数据(这是正确的吗?):

int main() {...

    c my_struct;

    my_struct.a.v1[0] = 0x01;
    my_struct.a.v1[1] = 0x02;
    .
    .
    .

    my_struct.a.type = 2048; // <- does this integer convert to "hex"?

现在我要实现的目标是获取my_struct并从u_char buff

获取my_struct
u_char buff[sizeOf(c)]; 

someConversionStuffHere(c, buff);
//function returns data like:
    //buff[0] = 0x01; //wanted result
    //buff[1] = 0x02; //wanted result

所以我可以使用buff并在需要u_char作为参数的第三方库中使用它。

我尝试过一些疯狂的事情:

循环播放并使用sscanf(),我的意思是我可以使用以下格式打印出c十六进制:

u_char *string_ptr = (U_char *)&p;
int i = sizeof(c);

while(i--) {
    u_char c = *string_ptr++;
    printf(" %x ", (u_char) c);
}

这打印&#34;正确&#34;值uint8_t v1[6]uint8_t v2[6],但当我尝试将2048打印为十六进制(应为0x800)时,它会打印0 8而不是08 00我希望如此。

我很想调试这个,但是C / C ++不是PHP,我可以原始地打印出任何没有问题的东西。

1 个答案:

答案 0 :(得分:1)

是的,@Mats说的是正确的:这是因为 endianness ..你可以看到一个关于&#34;正在进行的内容的说明&#34;在维基百科页面上:http://en.m.wikipedia.org/wiki/Endian