【发布时间】:2019-06-30 11:46:41
【问题描述】:
我正在开发一个信封加密库,其中信封结构是字节数组的组合。
keyAlias length , keyAlias , IVBytes, cipherBytes =
[int][keyAlias][IV][cipherBytes]
当我存储 int 的前 4 个字节以从信封字节中检索 keyAlias 的长度时,寻找正确处理 int 到字节并返回到 int。
假设:我决定始终将 int 字节以 Little-Endian 格式存储在信封字节中。
以下方法对于 int 到字节是否正确。由于无法访问 Big-Endian 机器,我无法对其进行测试。
[Fact]
public void IntToByteConverion_ShouldConvertBack2()
{
var intBytes = 2.ToLittleEndianBytes();
//Store intBytes to Database or AWS S3
// Retrive back the bytearray and convert to int32.
int intValue = intBytes.FromLittleEndianBytes();
Assert.Equal(2, intValue);
}
public static byte[] ToLittleEndianBytes(this int value)
{
if (BitConverter.IsLittleEndian)
return BitConverter.GetBytes(value);
else
{
var bigEndianBytes = BitConverter.GetBytes(value);
Array.Reverse(bigEndianBytes);// Converted to LittleEndian
return bigEndianBytes;
}
}
public static Int32 FromLittleEndianBytes(this byte[] littleEndianBytes)
{
if (BitConverter.IsLittleEndian)
return BitConverter.ToInt32(littleEndianBytes, 0);
else
{
Array.Reverse(littleEndianBytes);// Converted to big endian as machine CPU is big endian
return BitConverter.ToInt32(littleEndianBytes, 0);
}
}
【问题讨论】:
-
在我所说的问题中,我使用 LittleEndian 对 myint 进行编码,并将其作为字节传输或存储在 db 中。如果您参考文章:docs.microsoft.com/en-us/dotnet/api/… 它说常见的约定是通过网络以 Big Endian 方式发送字节。由于我没有遵循这个约定,只是想确认这不会导致任何错误。
标签: c# .net-core endianness