共2条
1/1 1 跳转至页
问
最近一直被一个问题困扰
定义一个结构和一个缓冲区以及一个指针
typedef struct
{
uint8 a1;
uint16 a2;
}TEST;
uint8 buf[10]={0x01,0x02,0x03,0x04};
TEST * temp;
后
uint8 b1;
uint16 b2;
temp = (TEST *) buf;
b1 = temp->a1;
b2 = temp->a2;
结果应该是 b1 = 0x01;b2 = 0x0203
可仿真的结果是 b1 = 0x01;b2 = 0x0003
我的0x02哪去了???请教怎么解决?谢谢诸位大侠
答 1: 也许跟CPU的类型有关你用的是什么CPU?编译器呢? 答 2: packed struct 答 3: 估计是uint8 buf[10]定义有问题,类型不匹配 答 4: 同意cwal20同意cwal20
估计是uint8 buf[10]定义有问题,类型不匹配 答 5: 是这样的cpu 就是LPC2210 编译器是ADS1.2
uint8 以被定义 #define unsigned char uint8 答 6: 字节对齐方式,ARM是32位的,我在移植TCP/IP时,就碰到IP Header和UDP Header存在类似的情况,示例如下
typedef __packed struct TIPHeader
{
// IP header
/*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 21 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification = 111 |Flg=0| Fragment Offset = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time = 123 | Protocol = 1 | header checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| source address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| destination address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding | < optional
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data ..........
+-+-+-+-+-+-+-+-+
*/
u8 VerLen;
u8 TOS;
u16 TotalLength;
u16 ID;
u16 Fragment;
u8 TTL;
u8 Protocol;
u16 Checksum;
T_IP_Addr SourceIP;
T_IP_Addr DestIP;
} T_IP_Header; 答 7: 有什么好的解决方法没?主要是别丢数据.
我也是在写TCP/IP协议栈的时候遇到的问题.
比较烦 答 8: 我觉得ADS1.2的结构体分配内存有问题你可以想办法查看一下 sizeof(TEST)到底多大,估计不是3。
我在做文件系统的MBR结构时遇到过结构体不能正常分配的问题。
定义一个结构和一个缓冲区以及一个指针
typedef struct
{
uint8 a1;
uint16 a2;
}TEST;
uint8 buf[10]={0x01,0x02,0x03,0x04};
TEST * temp;
后
uint8 b1;
uint16 b2;
temp = (TEST *) buf;
b1 = temp->a1;
b2 = temp->a2;
结果应该是 b1 = 0x01;b2 = 0x0203
可仿真的结果是 b1 = 0x01;b2 = 0x0003
我的0x02哪去了???请教怎么解决?谢谢诸位大侠
答 1: 也许跟CPU的类型有关你用的是什么CPU?编译器呢? 答 2: packed struct 答 3: 估计是uint8 buf[10]定义有问题,类型不匹配 答 4: 同意cwal20同意cwal20
估计是uint8 buf[10]定义有问题,类型不匹配 答 5: 是这样的cpu 就是LPC2210 编译器是ADS1.2
uint8 以被定义 #define unsigned char uint8 答 6: 字节对齐方式,ARM是32位的,我在移植TCP/IP时,就碰到IP Header和UDP Header存在类似的情况,示例如下
typedef __packed struct TIPHeader
{
// IP header
/*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 21 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification = 111 |Flg=0| Fragment Offset = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time = 123 | Protocol = 1 | header checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| source address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| destination address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding | < optional
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data ..........
+-+-+-+-+-+-+-+-+
*/
u8 VerLen;
u8 TOS;
u16 TotalLength;
u16 ID;
u16 Fragment;
u8 TTL;
u8 Protocol;
u16 Checksum;
T_IP_Addr SourceIP;
T_IP_Addr DestIP;
} T_IP_Header; 答 7: 有什么好的解决方法没?主要是别丢数据.
我也是在写TCP/IP协议栈的时候遇到的问题.
比较烦 答 8: 我觉得ADS1.2的结构体分配内存有问题你可以想办法查看一下 sizeof(TEST)到底多大,估计不是3。
我在做文件系统的MBR结构时遇到过结构体不能正常分配的问题。
共2条
1/1 1 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
| 在FireBeetle2ESP32-C5上实现温湿度检测和显示被打赏¥20元 | |
| 在FireBeetle2ESP32-C5上实现光照强度检测及显示被打赏¥21元 | |
我要赚赏金
