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

C语言中如何将short类型转换为unsigned char *buf供lws_write发送

实现方案

你需要先申请符合libwebsockets要求的缓冲区(前置预留LWS_PRE字节空间),再根据你要发送的是二进制原始值还是文本字符串选择转换方式:

场景1:发送二进制short原始值

如果你需要传输short的原始字节数据,建议手动拆分高低字节保持和你I2C读取时一致的大端序,避免主机大小端差异导致异常:

// 定义缓冲区,前置预留LWS_PRE字节,后面留short的2字节空间
unsigned char buf[LWS_PRE + sizeof(short)];
short value = read_raw_data(your_register_addr);

// 按高字节在前的顺序写入缓冲区有效位置
buf[LWS_PRE] = (value >> 8) & 0xFF;
buf[LWS_PRE + 1] = value & 0xFF;

// 调用lws_write,协议类型用LWS_WRITE_BINARY
int m = lws_write(wsi, buf + LWS_PRE, sizeof(short), LWS_WRITE_BINARY);

场景2:发送文本格式的short值(匹配你示例的LWS_WRITE_TEXT参数)

如果是要传输short的可读字符串形式(比如值为1024就传输"1024"),用snprintf直接转换到缓冲区即可:

// 定义缓冲区,前置预留LWS_PRE字节,后面留32字节文本空间匹配你的示例参数
unsigned char buf[LWS_PRE + 32] = {0};
short value = read_raw_data(your_register_addr);

// 将short转为字符串写入缓冲区有效位置
snprintf((char *)(buf + LWS_PRE), 32, "%d", value);

// 调用lws_write,长度可以填实际字符串长度,也可以固定填32
int m = lws_write(wsi, buf + LWS_PRE, strlen((char *)(buf + LWS_PRE)), LWS_WRITE_TEXT);

注意事项

  • 禁止直接对short变量取指针强转后传入lws_write:libwebsockets要求传入的缓冲区必须前置预留LWS_PRE字节的空间供内部写入协议头,直接传变量指针会导致内存越界。
  • 手动拆分高低字节的方式兼容性更好,不需要考虑当前运行主机的大小端架构,和你I2C读取时的字节序完全一致。

内容的提问来源于stack exchange,提问作者hannes ach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03