我正在编写一个类,它可以让我在字节和各种整数数据类型之间进行转换。我没有选择反转数组然后转换数据,而是选择确定系统的字节顺序是否与数据相同。如果是,我只需将数据映射到整数,例如 64 位整数:
result = (long)(
(buffer[index] << 56) |
(buffer[index + 1] << 48) |
(buffer[index + 2] << 40) |
(buffer[index + 3] << 32) |
(buffer[index + 4] << 24) |
(buffer[index + 5] << 16) |
(buffer[index + 6] << 8) |
(buffer[index + 7]));
如果系统和数据的字节序不同,它会像这样颠倒过来:
result = (long)(
(buffer[index]) |
(buffer[index + 1] << 8) |
(buffer[index + 2] << 16) |
(buffer[index + 3] << 24) |
(buffer[index + 4] << 32) |
(buffer[index + 5] << 40) |
(buffer[index + 6] << 48) |
(buffer[index + 7] << 56));
result
是一个 64 位有符号整数
buffer
是一个字节数组
index
是一个 32 位有符号整数,指示缓冲区中开始读取的位置
我的问题是......我做错了还是这只是一种非常简单的转换方法,而无需反转数组或制作副本?
这似乎应该适用于系统和数据字节序的所有组合,并在两者之间正确转换。
是否有可能更容易阅读或更简单的不同方式?