C_and_CPP 板


LINE

struct BMP_HEADER // BMP档档头 { short Check_Mark; /* 固定为'BM' */ long File_Size; /* 影像档大小 */ long Reserved; /* 保留 */ long Image_Offset; /* 影像资料在档案中的位置 */ long Header_Size; /* 档头大小,固定40表MS-Windows,12表OS/2 */ long Image_DX; /* 影像宽度 */ long Image_DY; /* 影像高度 */ short Bit_Planes; /* 色彩平面数,固定为1 */ short Bit_Count; /* 每点位元数, 1=黑白, 4=16色, 8=256色, 24=全彩 */ long Compression; /* 压缩方式, 0=不压缩, 1=RLE8(256色), 2=RLE4(16色) */ long Image_Size; /* 影像资料大小 */ long XDPM; /* 水平解析度(每公尺) */ long YDPM; /* 垂直解析度(每公尺) */ long Color_Used; /* 实际使用的颜色数,0表由Bit_Count决定 */ long Color_Important; /* 重要的色彩数目,0表都重要 */ }; 用手算的结果,这个结构的大小为 54 但是因为编译器会对记忆体配置最佳化,所以 sizeof() 会变成 56 这样,问题就来了.... 当我 fread(&bmp, sizeof(BMP_HEADER), 1, fp); 印出来的结果是错误的。 ============================================================================== Check_Mark(固定为'BM'): 19778 File_Size(影像档大小): 10 Reserved(保留): 3538944 Image_Offset(影像资料在档案中的位置): 2621440 ============================================================================== 如果一个一个读... fread(&bmp.Check_Mark, 2, 1, fp); fread(&bmp.File_Size, 4, 1, fp); fread(&bmp.Reserved, 4, 1, fp); fread(&bmp.Image_Offset, 4, 1, fp); 结果就是正确的.... ============================================================================== Check_Mark(固定为'BM'): 19778 File_Size(影像档大小): 720054 Reserved(保留): 0 Image_Offset(影像资料在档案中的位置): 54 ============================================================================== 请问有什麽方法可以解决呢? 之前有板友推文说
1F:推 feefee:#pragma pack() 可以解决你的问题
我试过了,还是不可以....>"< 我是用 VC 不是 gcc 所以也不能用板友说的 在结构宣告後面加 __attribute__((__packed__)) 请问,还有什麽方法可以解决呢?除了一个栏位一个栏位读。 谢谢大家! :) --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.163.161.135
2F:推 renderer:分两次读 Check_Mark一次 其他的一次 61.228.216.130 07/05
3F:推 leeya:一次读54个字元阵列,再去取你要的值= =" 211.75.159.136 07/05
4F:推 renderer:fread(&bmp.Check_Mark, 2, 1, fp); 61.228.216.130 07/05
5F:→ renderer:fread(&bmp.File_Size, 52, 1, fp); 61.228.216.130 07/05
6F:推 jeunder:应该是 #pragma pack(1) 才对 61.230.216.96 07/05
7F:→ jeunder:在你宣告 struct 之前使用 61.230.216.96 07/05
8F:推 qazq:喔喔喔!#pragma pack(1) 成功了!!谢谢!^_^218.163.161.135 07/05







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP