如何在 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中将2个二进制文件转换为short

C ++:从wchar_t *转换为unsigned short *是否安全?

C语言 unsigned short 如何相互转 signed char

将 Long 转换为 Unsigned Short Int / Strtol

将 unsigned short * 转换为 unsigned int *