【发布时间】:2011-05-15 06:14:27
【问题描述】:
我创建了以下函数,它将按要求执行(将 HEX 字符串转换为 BitArray)。我不确定函数的效率,但我现在的主要问题是 Convert.ToInt64 函数是 endian specific。当它被移植到备用芯片组时,我们将得到不同的结果(或异常)。那么谁能想到另一种方法来进行这种转换???
public BitArray convertHexToBitArray(string hexData)
{
string binary_values = "";
BitArray binary_array;
if (hexData.Length <= "FFFFFFFFFFFFFFFF".Length) // Max Int64
{
binary_values = Convert.ToString(Convert.ToInt64(hexData, 16), 2);
binary_array = new BitArray(binary_values.Length);
for (int i = 0; i < binary_array.Length; i++)
{
if (binary_values[i] == '0')
{
binary_array[i] = false;
}
else
{
binary_array[i] = true;
}
}
}
}
我删除了大部分错误/异常处理以保持它的大小,所以请原谅。
【问题讨论】:
-
“芯片组”不是 BigEndian,而是 CPU 内核。十六进制字符串也不是 BE,MSB 总是在左边。如果这样的 CPU 内核确实存在,那么它将运行具有 BE 版本的 BitConverter 的 .NET 版本。这个问题没什么意义。
-
使用 C# mono 这个解决方案最终会被移植到 Linux / Unix / Solaris / Non-stop 和许多其他平台上。我们公司过去在使用 Convert 类时遇到过问题……信不信由你,这是真的。
标签: c# bitmap hex endianness bitarray