如何将小端字节数组Byte[]转换为大端字节顺序?
我想将这个程序移植到Mono上,想知道最好的方法。任何帮助都将不胜感激。
编辑:我在Windows和Mono上同时从文件中读取。
谢谢,Bob。
如何将小端字节数组Byte[]转换为大端字节顺序?
我想将这个程序移植到Mono上,想知道最好的方法。任何帮助都将不胜感激。
编辑:我在Windows和Mono上同时从文件中读取。
谢谢,Bob。
byte[]
中的内容,否则无法将其转换为大端序。例如,2字节整数需要交换它们的两个字节,而4字节整数需要反转它们的4个字节。如果数组只包含一个整数,则可以翻转元素。如果不是,则需要单独处理数组中包含的每个不同实体。
Mono.DataConvert是一个库,如果您知道数组的哪些段需要作为什么类型的数据处理,它可以帮助您。我强烈推荐查看这个库;我在几个项目中使用它,非常方便。它甚至被MIT许可证授权,并且包含在一个源文件中,因此您可以直接将其编译到正在构建的任何程序集中。嗯,我认为这里有一个问题。字节数组很少本身就是大端或小端。一个字节几乎总是与大小端无关。你可能想要纠正字节数组中包含的整数、字符等的字节序。
为了做到这一点,您必须首先确定构成所述整数、字符等的字节,然后翻转这些字节。简单地翻转/反转整个数组可能行不通(除非整个数组表示一个单独的整数、字符等)。
使用以下重载的Array.Reverse()方法来实现您想要的效果...
public static void Reverse(
Array array,
int index,
int length
)
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();
}
}
Array.Reverse()
。