我有一个从 pkt 中提取 int8 变量的函数。 还有另一个函数可以打印值,但它接受字符形式的输入。 现在我想获取该 int8 变量,将其转换为 char 格式,同时保留位,然后将该 char 变量输入到打印函数。我真的很怀疑类型转换的事情,因为它没有给我看起来正确的结果。 这是代码。
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
int8 test_rssi_value = pkt->rssi; // i want to do this & convert int8 to char type which I can input to HalUARTWrite
unsigned char* Recv_RSSI = (unsigned char*)pkt->rssi; // I don't want to do this
HalLedBlink (HAL_LED_4, 4, 50, 250);
HalUARTWrite ( HAL_UART_PORT_0, Recv_RSSI, 1 );
}
和
uint16 HalUARTWrite ( uint8 port, uint8 *pBuffer, uint16 length )
{
--
}
谢谢 还有 ZStack 人员可以帮我解决这个问题吗: http://e2e.ti.com/support/wireless_connectivity/f/158/p/355391/1249087.aspx#1249087
最佳答案
由于在大多数现代平台上 char
是 8 位整数,因此 int8_t
等 8 位类型实际上是基于 char
的。问题是 char
的符号由编译器决定,因此对于某些编译器来说,例如char
和 uint8_t
很简单,对于其他编译器来说,char
和 int8_t
之间的转换也很简单。由于签名/未签名问题,您仍然必须使用强制转换。
现在要解决您的问题,您实际上不需要中间变量,或以任何形式使用 char
。使用地址运算符(一元 &
),您可以直接将指向 pkt->rssi
的指针作为参数传递给函数:
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
HalLedBlink (HAL_LED_4, 4, 50, 250);
HalUARTWrite ( HAL_UART_PORT_0, (uint8 *) &pkt->rssi, 1 );
}
如果 pkt->rssi
的类型已经 uint8
,那么您甚至不必进行类型转换。
关于c - 如何将8位int8变量放入char变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24819354/