【问题标题】:How to convert an short to unsigned char *buf in C?如何在 C 中将 short 转换为 unsigned char *buf?
【发布时间】: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,因为在有符号位算术和隐式类型提升方面存在多个问题。

标签: c libwebsockets


【解决方案1】:

只需使用强制转换将指向value 的指针转换为unsigned char

short value = ...;
lws_write(wsi, (unsigned char*)&value, sizeof value, LWS_WRITE_TEXT);

【讨论】:

  • 还需要注意字节顺序。在这种情况下,发送的字节数将取决于系统是 little-endian 还是 big-endian。
  • @nielsen 请你用一个例子解释一下吗?
  • @hannesach 参见例如答案在这里:stackoverflow.com/questions/22030657/…
  • @tstanisl 你也有提示吗? stackoverflow.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);
猜你喜欢
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2015-01-20
相关资源
最近更新 更多