gpt4 book ai didi

c++ - 结构到 u_char 的转换

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:48 25 4
gpt4 key购买 nike

假设我有一些与此类似的结构:

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 并能够从 my_struct 制作 u_char buff

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 作为参数的第 3 方库中使用它。

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

在 while 中循环并使用 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);
}

这会“正确”打印值 uint8_t v1[6]uint8_t v2[6],但是当我尝试将 2048 打印为十六进制时(它应该是 0x800) 它打印出 0 8 而不是(不是我期望的 08 00)。

我很乐意对此进行调试,但 C/C++ 不是 PHP,我可以在其中毫无问题地打印出任何内容。

最佳答案

是的,@Mats 说的是正确的:这是因为 endianness.. 您可以在维基百科页面上看到“幕后”发生的事情的插图:http://en.m.wikipedia.org/wiki/Endian

关于c++ - 结构到 u_char 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com