【发布时间】:2015-05-01 04:16:56
【问题描述】:
我只是在查看this 的答案,它提供了以下示例代码,用于将 int 转换为字节数组:
int intValue;
byte[] intBytes = BitConverter.GetBytes(intValue);
if (BitConverter.IsLittleEndian)
Array.Reverse(intBytes);
byte[] result = intBytes;
我查了Endianness,发现字节的反转(或缺少)是在一个字的级别,没有固定的长度。
上面的代码是否依赖于 int 是 1 个字的大小?如果是这样,您将如何编写与平台无关的代码?
作为旁注,我很确定我记得,在过去,查看调试器的内存视图并且必须反转 2 组 2 字节以构造 4 字节值...这是是什么让我想到了这件事..
【问题讨论】:
-
在C#中,
intis alwaysInt32,所以没有问题。 -
@Blorgbeard,但是 Int32 是否可以存在于字大小为 2 字节的架构上?
-
@AaronAnodide 除非 CPU 是middle-endian,否则不会改变字长
-
@xanatos,那么您是说在 32 位 CPU(即 4 字节字长)上,64 位整数将作为连续字节存在吗?换句话说,字节序不仅会影响单词中的字节顺序,还会影响值跨越多个单词的情况下的单词顺序……如果是这种情况,我想我可能会更好地理解……
-
"但是 Int32 是否可以存在于字大小为 2 字节的体系结构中" -- 是的,就像
Int64可以并且确实存在一样,即使您正在运行您的x86(32 位)平台上的 .NET 程序。平台架构与可用的数据格式无关;最多,它会影响平台可以最有效地处理哪些数据格式。
标签: c# endianness