来自ushort数组的64Bit Big Endian数据

时间:2017-06-08 15:23:04

标签: c# memory endianness

我有一个ushort数组,它在command.Data []中包含两个数组项。 我能够将这两个项目值组合在一起,并将32Bit Big Endian值作为UInt32,并使用以下代码。

UInt32 param32BitValue= (UInt32)command.Data[0] << 32 | command.Data[1];

我有另一个参数,它在ushort数组中包含4个项目,我想将这四个值组合成ulong值,如

(插图)

UInt64 param64BitValue= (UInt64)command.Data[0] << 64 | command.Data[1] << 64 | command.Data[2] << 64 | command.Data[3];

大或小端格式。我该如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果command.Data确实是ushort[]数组,那么您的第一个代码段实际上应该移位16位,而不是32位。

uint bigEndian32 = ((uint)command.Data[0] << 16) | command.Data[1];

对于64位,你只需每次向左移16位:

ulong bigEndian64 = ((ulong)command.Data[0] << 48) | (command.Data[1] << 32) | (command.Data[2] << 16) | command.Data[3];