我有一个无符号字符数组[248];充满字节。如 2F AF FF 00 EB AB CD EF .....
这个数组是我的字节流,我将来自 UART (RS232) 的数据存储为缓冲区。
现在我想将字节转换回 uint16 和 int32。
在 C# 中,我使用 BitConverter 类来执行此操作。例如:
byte[] Array = { 0A, AB, CD, 25 };
int myint1 = BitConverter.ToInt32(bytes, 0);
int myint2 = BitConverter.ToInt32(bytes, 4);
int myint3 = BitConverter.ToInt32(bytes, 8);
int myint4 = BitConverter.ToInt32(bytes, 12);
//...
enter code here
Console.WriteLine("int: {0}", myint1); //output Data...
C中有类似的函数吗? (没有 .net ,我使用 KEIL 编译器,因为代码在微控制器上运行)
带着敬意
山姆
C 中没有标准函数可以为您完成此操作。您必须自己将字节组装回 16 位和 32 位整数。小心字节序!
这是一个简单的小端示例:
extern uint8_t *bytes;
uint32_t myInt1 = bytes[0] + (bytes[1] << 8) + (bytes[2] << 16) + (bytes[3] << 24);
对于大端系统,它的顺序正好相反:
uint32_t myInt1 = (bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3];
你也许可以逃脱:
uint32_t myInt1 = *(uint32_t *)bytes;
如果您小心对齐问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)