【嵌入式】uint32值写入到二进制文件中的存储详情

背景

项目预留100字节用于存储参数文件。现在有些数值一个字节表示不够,需要用4个字节。比如数值1144201745,对应的十六进制0x44332211,那么在二进制中存储是怎么样的呢?做个总结

分析

写了一个sample,把uint32_t u32Value1{0x01U}和uint32_t u32Value2{0x44332211U}写到data.bin文件中,然后用十六进制的软件打开查看,文件的数据如下:
在这里插入图片描述
先低字节,然后高字节。
所以,读取的时候,定义一个uint32_t u32ReadValue,从该data.bin文件中读取四个字节,打印出来是十六进制就是0x44332211

扩展

定义一个uint8_t sz_u8Value[4]{0x11,0x22,0x33,0x44},然后把这个打印(((uint32_t)sz_u8Value)值也是0x44332211
把sz_u8Value数组4个字节写到bin.data文件也是上面截图的数据存储方式。

总结

小端存储架构:如果需要把多字节分成单字节并写到二进制文件中,使用的地方按照读取数据读出直接强转对应类型,则需要在写入的时候按照低字节从低到高赋值后写入。

当涉及到视频处理和编码时,涉及的代码会比较复杂,而且具体实现方式还取决于你使用的编码标准和嵌入式平台。以下是一个示例代码,演示了如何使用FFmpeg库将视频转换为二进制数据流,并与本地二进制数据进行比较: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <libavformat/avformat.h> #define BUFFER_SIZE 4096 int main(int argc, char *argv[]) { // 检查参数 if (argc < 3) { printf("Usage: ./video_comparison input_video_file binary_data_file\n"); return -1; } // 初始化FFmpeg av_register_all(); // 打开输入视频文件 AVFormatContext *formatCtx = NULL; if (avformat_open_input(&formatCtx, argv[1], NULL, NULL) != 0) { printf("Failed to open input video file\n"); return -1; } // 查找视频流 int videoStreamIndex = -1; AVCodecParameters *codecParams = NULL; for (int i = 0; i < formatCtx->nb_streams; i++) { if (formatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; codecParams = formatCtx->streams[i]->codecpar; break; } } if (videoStreamIndex == -1) { printf("No video stream found in the input video\n"); return -1; } // 打开输出文件 FILE *outputFile = fopen(argv[2], "wb"); if (!outputFile) { printf("Failed to open output binary data file\n"); return -1; } // 分配缓冲区 uint8_t buffer[BUFFER_SIZE]; // 读取视频帧并写入进制数据流 AVPacket packet; while (av_read_frame(formatCtx, &packet) >= 0) { if (packet.stream_index == videoStreamIndex) { fwrite(packet.data, 1, packet.size, outputFile); } av_packet_unref(&packet); } // 清理资源 fclose(outputFile); avformat_close_input(&formatCtx); printf("Video to binary data conversion completed successfully\n"); return 0; } ``` 这段示例代码使用了FFmpeg库来处理视频文件。你需要在编译时链接FFmpeg库,并确保正确安装了相关的开发包。请注意,这只是示例代码,你可能需要根据实际情况进行修改和适配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值