这是一个翻转任何变量字节顺序的好功能,可以很容易地用来改变字节顺序。
void byteFlip(void* original, size_t numberOfBytes)
{
char* reversed = (char*) malloc(numberOfBytes);
for (int i = 0; i < numberOfBytes; i++)
{
reversed[i] = ((char*)original)[numberOfBytes - i - 1];
}
memcpy(original, reversed, numberOfBytes);
free(reversed);
}
这将翻转“原始”参数中使用的变量的字节顺序。例子:
short a = 512;
//AAAAAAAA BBBBBBBB - 00000010 00000000
cout << a << endl; //outputs 512
byteFlip(&a, sizeof(short)); //flip byte order of 'a'
//BBBBBBBB AAAAAAAA - 00000000 00000010
cout << a << endl; //outputs 2
说明:此函数接受一个指向任何类型变量的指针,以及该变量的字节大小。由于我们正在反转字节顺序,并且 1 个字符 = 1 个字节,因此我们可以像反转字符串一样对待它。我们创建一个与变量大小相同的新字符串来保存反转的数据。现在我们使用 for 循环将每个字节作为 char 以相反的顺序复制到反转字符数组变量中。循环完成后,我们可以将反转字符串的内存复制到原始指针中。最后,我们释放了反向字符串变量的内存,因为它已被复制到原始指针中,因此不再需要。