C++中如何在char buffer的指定字节位置写入short类型数值
实现方案
首先需要明确两个前提:
- 你提到的「第20~21字节」如果是从0开始计数的索引,对应代码偏移量为20;如果是从1开始计数的位置,对应代码偏移量为19,可按需调整
- 2字节的short类型存在字节序差异,需要根据你的实际业务需求选择大端(高字节存低地址)或小端(低字节存低地址)写入
方案1:手动按字节赋值(最推荐,全平台兼容、字节序可控)
该方案不存在内存对齐问题,所有架构下都可以正常运行,也可以自由指定字节序:
#include <stdint.h> // 你的50字节buffer char buffer[50] = {0}; short target_val = -1234; // 示例为写入到0开始的索引20、21位置,小端序模式 buffer[20] = target_val & 0xFF; buffer[21] = (target_val >> 8) & 0xFF; // 如果需要大端序,替换为下面两行即可 // buffer[20] = (target_val >> 8) & 0xFF; // buffer[21] = target_val & 0xFF;
方案2:memcpy拷贝(无对齐问题,使用当前系统原生字节序)
如果不需要跨平台兼容,只要匹配当前运行设备的原生字节序,可以用memcpy实现:
#include <string.h> char buffer[50] = {0}; short target_val = -1234; // 写入到0开始的索引20位置 memcpy(buffer + 20, &target_val, sizeof(short));
注意:不推荐直接用指针强转的写法
*(short *)(buffer + 20) = target_val,该写法在要求内存对齐的架构(如ARM、MIPS)上可能触发崩溃或严重性能损耗,除非你能确认buffer + 20的地址满足2字节对齐要求。
内容的提问来源于stack exchange,提问作者rdx
相关产品推荐
相关产品推荐

