问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

目的是模拟将一个bin文件得内容,放入到一个存储结构中,并在这个二进制文件前面加上一个信息头。

发布网友 发布时间:2022-05-06 16:25

我来回答

1个回答

热心网友 时间:2023-10-11 20:53

struct test{

char HTag;//1字节
char systemVersion;//1字节
int storagelenth;//4字节。

};//对齐1字节情况下,结构体6字节。

你分配的内存也就是6+3=9字节。 这个分配空间是没初始化的。也就是随机值。

memcpy(image, &header_information, sizeof(struct test));

执行这句之后, 前六个字节的值就是 'H' '3' 0x7 0x0 0x0 0x0. 

而输出printf("%s\n", startimage); 会到0结束。所以 只能打印出H3 无法打印出其他的。

调试器对于image的内容显示的是无效字符串 这个是因为没有合法的结束符。 可以在malloc之后加一个memset。 或者手动的 startimage[sizeof(struct test) + 2] = 0; 添加一个结束符。


最终 正确的9个字节值 应该是

'H' '3' 0x7 0x0 0x0 0x0 'f' 'b' 0x00

追问那其实我的这段startimage内存是对的吧,如果说我是真的需要把这段内存打印出来的话,应该如何操作呢?(感谢你的帮助啊,之前也问过你好多问题,实在是感谢)

追答这种的 要么分块打印
struct test *t = (struct test*)startimage;
printf("%c %c %d %s\n", t->HTag, t->systemVersion, t->storagelenth, startimage+sizeof(struct test));
要么直接二进制打印
for(image=startimage; image<startimage+sizeof(struct test) + 3; image++)
printf("0x%02X,", *image);

来自:求助得到的回答

热心网友 时间:2023-10-11 20:53

struct test{

char HTag;//1字节
char systemVersion;//1字节
int storagelenth;//4字节。

};//对齐1字节情况下,结构体6字节。

你分配的内存也就是6+3=9字节。 这个分配空间是没初始化的。也就是随机值。

memcpy(image, &header_information, sizeof(struct test));

执行这句之后, 前六个字节的值就是 'H' '3' 0x7 0x0 0x0 0x0. 

而输出printf("%s\n", startimage); 会到0结束。所以 只能打印出H3 无法打印出其他的。

调试器对于image的内容显示的是无效字符串 这个是因为没有合法的结束符。 可以在malloc之后加一个memset。 或者手动的 startimage[sizeof(struct test) + 2] = 0; 添加一个结束符。


最终 正确的9个字节值 应该是

'H' '3' 0x7 0x0 0x0 0x0 'f' 'b' 0x00

追问那其实我的这段startimage内存是对的吧,如果说我是真的需要把这段内存打印出来的话,应该如何操作呢?(感谢你的帮助啊,之前也问过你好多问题,实在是感谢)

追答这种的 要么分块打印
struct test *t = (struct test*)startimage;
printf("%c %c %d %s\n", t->HTag, t->systemVersion, t->storagelenth, startimage+sizeof(struct test));
要么直接二进制打印
for(image=startimage; image<startimage+sizeof(struct test) + 3; image++)
printf("0x%02X,", *image);

来自:求助得到的回答

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 以丹阳为名字 服用乳酸菌素片后再服用龙胆碳酸氢钠片可以吗? VC 实现 输出 Bmp 图像中所有像素点的灰度值到文本 女孩取名丹阳好吗 关于BMP文件头数据解读的疑问 复方龙胆碳酸氢钠片的药物相互作用 韦丹阳的名字意义? 用vc如何获取bmp图片的文件头信息头 反酸,烧心吃什么药好 廖丹阳名字含义? 加密的文件解密不了,提示头部信息不正确 龙胆泻肝碳酸氢钠片 丹阳名字的来源是啥? 怀孕40天左右吃的一盒三金片,2粒斯达舒 复方龙胆碳酸氢钠片, 丹阳是什么意思 龙胆苏打片是不是龙胆碳酸氢钠 丹阳的含义 龙胆碳酸氢钠片的药物相互作用 名字叫丹阳有什么寓意? 复方龙胆碳酸氢钠片是酵母片吗 吕丹阳的名字意思。 我叫*阳,他叫常亚辉,谁可以用我们的名字设计个情侣网名? 谢谢 BMP的对应数据结构 女孩取名张丹阳好吗 男孩起名叫丹阳怎么样? 丹阳有什么民间传说? 江苏丹阳在古时候叫什么呢? 佛晓丹阳是什么意思 江苏丹阳在古时候又叫过什么名字? 德亿抽油烟机算不算牌子 德亿天然气灶是一线品牌吗? 德亿如何调时间 能快速瘦腿的方法是什么 微信怎么转发别人图和文字一起发出来的东西? 德亿指纹锁怎么进入管理模式 荞饼怎么做既软又好吃 德亿电器是知名品牌吗? 大荞饼的制作方法 德亿生活旗下有什么品牌? 用电饼裆做荞饼是只用下盘还是上下盘都要用?