You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:54:06