【问题标题】:Cast an int16_t variable to uint8_t for passing to function将 int16_t 变量转换为 uint8_t 以传递给函数
【发布时间】:2021-12-04 12:10:18
【问题描述】:

我想将一个 2 字节的有符号整数传递给一个函数(STM32 USB 传输),该函数接受一个指向 1 字节无符号整数的指针和字节大小。

int16_t some_number;
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)

我在调用函数时尝试过转换数字,但它不起作用。

CDC_Transmit_FS((uint8_t*)some_number,sizeof(some_number));

我也尝试将数据拆分为数组,但函数接收到的数据是乱码。 感谢您的帮助,谢谢。

【问题讨论】:

  • (uint8_t*)&some_number
  • 您可能想在您最喜欢的 C 书籍中查看指针基础知识。还有字节序。
  • tstting,在((uint8_t*)&some_number)[0] 中可能是最重要的字节或最少的字节。它取决于实施。
  • 要正确执行此操作,您需要了解CDC_Transmit_FS 的规范/语义。它将向某个接收器传输字节。如果你给它发送字节,而接收者会按照你发送它们的顺序期待字节,那么你可以用CDC_Transmit_FS((uint8_t *) &some_number, sizeof some_number) 来调用它(除了增加视觉混乱之外,你没有做任何额外的括号)......跨度>
  • … 然而,一些通信协议规定最高有效字节应该在前(称为big endian order)。在这种情况下,您需要确保按该顺序发送字节,方法是确保 int16_t1 is natively big-endian in your C implementation or by using code to convert it to big-endian order before sending it. There are commonly available routines for this, such as htons 将 Shorts(16 位无符号整数)从主机到网络顺序转换。 (然后考虑int16_tuint16_t。)

标签: c stm32 stm32f4discovery


【解决方案1】:

我想你想传递some_number的地址,即:

CDC_Transmit_FS((uint8_t*)(&some_number),sizeof(some_number));

【讨论】:

  • 您确定按要求的顺序发送字节吗?
  • 不,我不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2012-03-02
相关资源
最近更新 更多