【发布时间】:2014-07-18 07:21:29
【问题描述】:
我有一个函数可以从 pkt 中提取一个 int8 变量。 还有另一个函数可以打印值,但它以 char 的形式输入。 现在我想获取该 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
【问题讨论】:
-
你的代码有几个问题:首先你得到
pkt->rssi作为一个普通的8位整数,然后在下一行你再次得到pkt->rssi,但这次是一个指针.不可能同时是两件事。如果pkt->rssi实际上是一个 8 位整数,那么如果你想获得它的地址,你应该使用地址运算符&,就像在&pkt->rssi中一样。 -
另请注意,在几乎所有现代计算机上,
char都是 8 位。 -
如果我这样做会怎样:int8 rssi_value = pkt->rssi;然后 char* pAdd = &rssi_value;然后使用 HALUartWrite(port,pAdd,1);或者这可能更正确。实际上我认为 (unsigned char*)pkt-rssi 会将 int8 类型转换为 char 但我认为我确实在那里犯了错误。让我试试新的东西。
-
为什么不在通话中直接使用
&pkt->rssi?不需要中间变量。 -
非常感谢 :) !希望现在是正确的:)。有什么问题我会回复的。
标签: c type-conversion