如何在 C 中将 short 转换为 unsigned char *buf?
Posted
技术标签:
【中文标题】如何在 C 中将 short 转换为 unsigned char *buf?【英文标题】:How to convert an short to unsigned char *buf in C? 【发布时间】:2021-11-02 07:17:50 【问题描述】:如何在 C 中将 short
转换为 unsigned char *buf
?
我读取了我的数据
short read_raw_data(int addr)
short high_byte, low_byte, value;
high_byte = wiringPiI2CReadReg8(fd, addr);
low_byte = wiringPiI2CReadReg8(fd, addr + 1);
value = (high_byte << 8) | low_byte;
return value;
并想与它一起发送
lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol);
喜欢
m = lws_write(wsi, myShortConvertedToUnsignedChar + LWS_PRE, 32, LWS_WRITE_TEXT);
如何做到这一点?
【问题讨论】:
第一步是删除所有默认整数类型并开始使用stdint.h。您应该只在这个 sn-p 中使用 uint8_t、uint16_t 和也许 uint32_t,因为在有符号位算术和隐式类型提升方面存在多个问题。 【参考方案1】:只需使用强制转换将指向value
的指针转换为unsigned char
:
short value = ...;
lws_write(wsi, (unsigned char*)&value, sizeof value, LWS_WRITE_TEXT);
【讨论】:
还需要注意字节顺序。在这种情况下,发送的字节数将取决于系统是 little-endian 还是 big-endian。 @nielsen 请你用一个例子解释一下吗? @hannesach 参见例如答案在这里:***.com/questions/22030657/… @tstanisl 你也有提示吗? ***.com/questions/69822300/… @hannesach,试试char buf[1024]; sprintf(buf, "%.3f %.3f %.3f %.3f %.3f %.3f\n", Gx, Gy, Gz, Ax, Ay, Az); lws_write(wsi, (unsigned char*)buf, strlen(buf), LWS_WRITE_TEXT);
以上是关于如何在 C 中将 short 转换为 unsigned char *buf?的主要内容,如果未能解决你的问题,请参考以下文章
怎样把unsigned short 转换为 unsigned char
C ++:从wchar_t *转换为unsigned short *是否安全?
C语言 unsigned short 如何相互转 signed char