搜索
bottom↓
回复: 3
打印 上一主题 下一主题

请教C语言数据转换

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2012-11-24 21:21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在IAR环境中:
#define  uint8    unsigned char
#define  uint16   unsigned int
#define  uint32   unsigned long int

unsigned char BUFFER[512]; //存放数据

typedef struct  //这里一共是512个字节
{
        uint8 BS_jmpBoot[3];
        uint8 BS_OEMName[8];
        uint16 BPB_BytesPerSec;
        uint8 BPB_SecPerClus;
        uint16 BPB_RsvdSecCnt;
        uint8 BPB_NumFATs;
        uint16 BPB_RootEntCnt;
        uint16 BPB_TotSec16;
        uint8 BPB_Media;
        uint16 BPB_FATSz16;
        uint16 BPB_SecPerTrk;
        uint16 BPB_NumHeads;
        uint32 BPB_HiddSec;
        uint32 BPB_TotSec32;
        uint8 BS_DrvNum;
        uint8 BS_Reservedl;
        uint8 BS_BootSig;
        uint32 BS_VolID;
        uint8 BS_VolLab[11];
        uint8 BS_FilSysType[8];
        uint8 ExecutableCode[448];
        uint8 ExecutableMarker[2];
} FAT_BPB;


FAT_BPB* BPB;

当我读出了512字节存放到BUFFER中后  BPB = (FAT_BPB*)BUFFER; 查看BPB中的数据发现       
uint8 BS_jmpBoot[3];
uint8 BS_OEMName[8]; 这11个数据正常,
BUFFER[11]=0x00;
BUFFER[12]=0x02;
BUFFER[13]=0x40;
转换过去     BPB_BytesPerSec=0x4002 我感觉应该是0x0200才对啊,编译器怎么会把BUFFER[11]给漏掉了呢?请教了 谢谢




阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

2
发表于 2012-11-24 22:01:51 | 只看该作者
你看一下sizeof(FAT_BPB),真的是512字节大小么?
这种方法:
#pragma pack(1)
typedef struct
{
   XXX xxx
}FAT_PBP
倒是可以将该结构体弄成512字节,但是按你的赋值/寻址方式,会导致对该结构体内的某些UINT16字访问错误,因为430要求对16位变量寻址时,其低位地址必须是0,如果不是,会强制付成0,这是430单片机寻址上比较恶心的不足。所以,还是考虑别的使用方法吧。

出0入0汤圆

3
发表于 2012-11-24 22:03:48 | 只看该作者
说白了就是结构体默认按WORD来对齐,导致结构体内部产生了一些字节padding引起的问题。加上430寻址上的缺陷,所以你的用法有问题。而且,没有什么太好的方法。

出0入0汤圆

4
 楼主| 发表于 2012-11-24 22:34:44 | 只看该作者
jetlib 发表于 2012-11-24 22:03
说白了就是结构体默认按WORD来对齐,导致结构体内部产生了一些字节padding引起的问题。加上430寻址上的缺陷 ...

谢谢了,430学的不够仔细啊...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 08:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表