我有一些关于endian-ness的问题已经足够相关,我保证将它们作为一个问题加入:
1).Net或硬件是否决定了字符串?
2)如果由硬件决定,我怎样才能弄清楚硬件在C#中的端点?
3)endian-ness会影响二进制交互,例如OR,AND,XOR或移位吗? I.E.一次向右移动总会偏离最不重要的位吗?
4)我对此表示怀疑,但是.Net框架的不同版本的endian-ness是否存在差异?我认为它们都是一样的,但我已经学会停止假设一些较低级别的细节,例如这个。
如果需要,我可以问这些不同的问题,但我认为任何知道其中一个答案的人可能都知道所有人的答案(或者可以指出我的方向)。
答案 0 :(得分:30)
1)硬件。
2)BitConverter.IsLittleEndian
3)字节顺序不影响按位运算。向右移动正在向最不显着位方向移动。 来自Oops的更新评论但是,字节顺序确实会影响二进制输入和输出。当读取或写入大于一个字节的值(例如,从int
或BinaryReader
读取BitConverter
)时,您必须考虑字节序。一旦正确读取了值,那么所有按位操作都会正常运行。
4)大多数.NET版本都是小端。值得注意的例外包括XBox和Mono或Compact Framework支持的一些平台。
答案 1 :(得分:0)
1)既不也不...或者你可以说任何一个
它是由硬件开发人员决定的。如果您编写的软件在不使用外部库的情况下读取/写入某些文件格式,您必须做出决定
endiannes没有问题如果你从文件中读取
*一个字节
但你必须决定如何以小端或大端格式解释它
如果您阅读所有其他原始数据类型,如
*整数,
*字符串,
*花车。
硬件在这里没有帮助。 BitConverter在这里没有帮助。只有文件格式的文档可以帮助和测试您的代码当然...
编辑:在这里找到广告很好的解释:
http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/