【发布时间】: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 ashtons 将 Shorts(16 位无符号整数)从主机到网络顺序转换。 (然后考虑int16_t与uint16_t。)
标签: c stm32 stm32f4discovery