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