我在下面有一些代码应该将C (Arduino) 8 位字节数组转换为 16 位 int 数组,但它似乎只能部分工作。我不确定我做错了什么。
字节数组采用小端字节序。如何将其转换为 int(每个实体两个字节)数组?
用外行的话来说,我想每两个字节合并一次。
目前它正在为输入 BYTE ARRAY 输出:{0x10, 0x00, 0x00, 0x00, 0x30, 0x00}
。输出 INT ARRAY 是:{1,0,0}
。输出应该是一个 INT ARRAY is: {1,0,3}
。
下面的代码是我目前拥有的:
我根据Stack Overflow 问题Convert bytes in a C array as longs 中的解决方案编写了这个函数。
我也有这个基于相同代码的解决方案,它适用于 byte array to long (32-bits) array http://pastebin.com/TQzyTU2j
。
/**
* Convert the retrieved bytes into a set of 16 bit ints
**/
int * byteA2IntA(byte * byte_slice, int sizeOfB, int * ret_array){
//Variable that stores the addressed int to be stored in SRAM
int currentInt;
int sizeOfI = sizeOfB / 2;
if(sizeOfB % 2 != 0) ++sizeOfI;
for(int i = 0; i < sizeOfB; i+=2){
currentInt = 0;
if(byte_slice[i]=='\0') {
break;
}
if(i + 1 < sizeOfB)
currentInt = (currentInt << 8) + byte_slice[i+1];
currentInt = (currentInt << 8) + byte_slice[i+0];
*ret_array = currentInt;
ret_array++;
}
//Pointer to the return array in the parent scope.
return ret_array;
}