gpt4 book ai didi

c - 从unit8_t缓冲区到结构体的指针类型转换

转载 作者:行者123 更新时间:2023-11-30 14:46:35 25 4
gpt4 key购买 nike

我正在尝试输入 uint8_t缓冲至structurebit字段如下。

#include<stdio.h>
#include<inttypes.h>

struct msg{
uint64_t field:56;
};

void main()
{
uint8_t buf[8]={0x7,0x6,0x5,0x4,0x3,0x2,0x1};
struct msg *m = buf;
printf("buf=%"PRIx64"\n",m->field);
}

但我得到的输出如下。

Actual output:

buf=1020304050607

Expected output:

buf=7060504030201

我在打字时做错了什么吗?

最佳答案

您可以使用 union 来代替指针双关,以提高可移植性

#include <stdio.h>
#include <stdint.h>


typedef union
{
struct
{
uint64_t u56:56;
};
uint8_t u8[sizeof(uint64_t)];
}msg;


msg *pune(msg *message, uint8_t *data, size_t datalen, int endianes)
{
if(endianes)
{
for(size_t index = 0; index < datalen; index++)
{
message -> u8[index] = data[index];
}
}
else
{
for(size_t index = 0; index < datalen; index++)
{
message -> u8[index] = data[datalen - index - 1];
}
}
return message;
}


int main()
{
msg message;
uint8_t buf[8]={0x7,0x6,0x5,0x4,0x3,0x2,0x1};

printf("buf=%llx\n",pune(&message, buf, 7, 1) -> u56);
printf("buf=%llx\n",pune(&message, buf, 7, 0) -> u56);
return 0;
}

关于c - 从unit8_t缓冲区到结构体的指针类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52146548/

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