将 int16_t 变量转换为 uint8_t 以传递给函数

Posted

技术标签:

【中文标题】将 int16_t 变量转换为 uint8_t 以传递给函数【英文标题】:Cast an int16_t variable to uint8_t for passing to function 【发布时间】: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。) 【参考方案1】:

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

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

【讨论】:

您确定按要求的顺序发送字节吗? 不,我不确定。

以上是关于将 int16_t 变量转换为 uint8_t 以传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

uint8与uint8_t区别

uint8_t uint32_t 类型强制转换出错 以及 unsigned char 类型和 unsigned int 类型相互转化

PHP - unpack() uint8_t 和 uint16_t

int8_tuint8_t等来源

uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?

uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?