C# 4.0 将字节数组从低位转换为高位,反之亦然

C# 4.0 将字节数组从低位转换为高位,反之亦然,c#-4.0,endianness,C# 4.0,Endianness,如何将字节数组byte[]从小字节转换为大端 我正在考虑将这个程序移植到Mono上,我想知道最好的方法是什么。任何帮助都将不胜感激 编辑:我正在读一个关于widows和mono的文件。 谢谢。 Bob.要反转数组中的项,还是要反转字节本身的值?如果只是数组,那么可以使用array.Reverse()嗯,我想这里有个问题。字节数组本身很少是大端或小端。字节几乎总是与endian无关的。您可能需要更正字节数组中包含的整数、字符等的尾数 为此,您必须首先确定构成上述整数、字符等的字节,然后翻转这些字节

如何将字节数组byte[]从小字节转换为大端

我正在考虑将这个程序移植到Mono上,我想知道最好的方法是什么。任何帮助都将不胜感激

编辑:我正在读一个关于widows和mono的文件。

谢谢。
Bob.

要反转数组中的项,还是要反转字节本身的值?如果只是数组,那么可以使用
array.Reverse()

嗯,我想这里有个问题。字节数组本身很少是大端或小端。字节几乎总是与endian无关的。您可能需要更正字节数组中包含的整数、字符等的尾数

为此,您必须首先确定构成上述整数、字符等的字节,然后翻转这些字节。简单地翻转/反转整个数组可能不起作用(除非整个数组表示一个整数、字符等)

使用该方法的以下重载来执行所需操作

public static void Reverse(
    Array array,
    int index,
    int length
)
除非您知道
字节[]
中的内容,否则无法“将
字节[]
转换为big-endian”。例如,2字节整数需要交换其两个字节,而4字节整数需要反转其4个字节。如果数组仅包含一个整数,则可以反转元素。如果没有,则需要分别处理数组中包含的每个不同实体


如果您知道数组的哪些段需要被视为什么类型的数据类型,那么这是一个可以提供帮助的库。我强烈建议你去看看这个图书馆;我在几个项目中使用它,它非常漂亮。它甚至是MIT授权的,并且包含在一个源文件中,因此您可以直接将其编译到正在构建的任何程序集中。

在我的例子中,我需要将给定的键(已经是小端格式)转换为大端字符串。这比我最初想象的要容易,而且不需要移动字节。下面是我用来测试它的一个简单控制台应用程序:

    using System;
    using System.Text;

    public class Program
    {
        public static void Main()
        {   
            string key = "B13E745599654841172F741A662880D4";
            var guid = new Guid(key);
            string hex = HexStringFromBytes(guid.ToByteArray());
            Console.WriteLine("Original key: " + guid);
            Console.WriteLine();                
            Console.WriteLine("Big-endian version of the key: " + hex);
            Console.ReadLine();
        }

        public static string HexStringFromBytes(byte[] bytes)
        {
            var sb = new StringBuilder();
            foreach (byte b in bytes)
            {
                var hex = b.ToString("x2");
                sb.Append(hex);
            }
            return sb.ToString();
        }
    }
给定的示例在控制台中打印此内容:

原钥匙:B13E7455-9965-4841-172F-741A662880D4

密钥的大端版本:55743eb165994148172f741a662880d4


您可以在这里找到一个可用的小提琴:

字节数组包含从文件中读取的内容。您好,我看到Mono.DataConvert,但不知道如何应用它。从本质上讲,数组包含在另一个系统的windows或Mono上的日志文件中读取的内容。我不想确保对于所有日志读取器,无论它在何处驻留或读取,所读取的内容都是单一的endian格式(windows默认值)。如果不知道该日志文件的格式,您就什么也做不了。该格式是如何实现的。我知道我正在阅读的每个文件的编码。我不确定我是否知道你的意思。编码?这是文本文件吗?如果是,字符编码是什么?是的,它是一个文本文件。ASCII,但它可以很容易地是unicode或UTF32。