c - 如何将8位int8变量放入char变量中?

标签 c type-conversion

我有一个从 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 的符号由编译器决定,因此对于某些编译器来说,例如charuint8_t 很简单,对于其他编译器来说,charint8_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/

相关文章:

C程序: implicit declaration of function and conflicting types

c - 导致不需要的变量被修改的 strcpy 函数

type-conversion - Kotlin 的 Double.toInt() 中使用了哪种方法,舍入还是截断?

numbers - Kotlin:有没有办法清除数字重载?

c - 如何在我的 GTK 应用程序中隐藏光标(用 C 编写)

python - 逆向工程得到CRC16多项式

c - 我如何处理整数溢出?

types - F# 从列表创建类型

c# - 在 C# 中使用 Xml 序列化从一个类转换为另一个类

java - JNI 中 unsigned char 指针的等价物是什么?