【问题标题】:Hex string to bool[] C#十六进制字符串到 bool[] C#
【发布时间】:2020-04-14 14:26:11
【问题描述】:

我有一个十六进制字符串string hex = A5A6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAAAAAAA9552,我想将其转换为布尔数组。

我已经找到了一个可以将其转换为字节数组的函数,但后来我发现我需要一个布尔数组来代替。如何更改此功能/创建一个为我完成工作的新功能?

private byte[] ConvertHexStringToByteArray(string hexString)
{
    if (hexString.Length % 2 != 0)
    {
        throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
    }

    byte[] data = new byte[hexString.Length / 2];
    for (int index = 0; index < data.Length; index++)
    {
        string byteValue = hexString.Substring(index * 2, 2);
        data[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
    }

    return data;
}

感谢任何帮助,在这里感觉有点失落!

编辑:

如果遇到十六进制值 A5,例如,我想返回一个 bool 数组,其中包含:

bool =  {true, false, true, false, false, true, false, true, false, false, false, false, false, false, false, false}

【问题讨论】:

  • 你确定是字节数组(byte = 0 - 255)还是位数组(bit = 0 - 1)??
  • A byte[] 可以解释为“bool 数组”,因为您将每个位作为 bool 值......然后您只需要一个检查特定位位置并返回 bool 的函数。
  • 我没有得到你的要求?!? - 你将你的字符串分成两个块,你最终会得到这6个唯一值A5,A6,AA,9A,95,52 - 为什么应该@987654330 @ 是真的?或52?等等?你判断真假的标准是什么?
  • 您希望bool[] 看起来像完全吗?您有示例输入/输出吗?请注意,bool[] 的效率难以置信,可能还有更好的选择,例如 BitArray
  • 弄清楚你的布尔值是如何编码的,可以是每比特或每字节,或者介于两者之间的任何东西。你的字符串的来源应该可以告诉你。

标签: c# boolean hex


【解决方案1】:

在最简单的层面上,BitArray 可以使用现有代码完成您需要的一切:

var bytes = ConvertHexStringToByteArray("A5");
var bits = new BitArray(bytes);
for(int i = 0; i < bits.Length; i++)
    Console.WriteLine(bits[i]);

这可以完成工作,不需要任何返工,但它不是bool[];坦率地说,我会反对推荐bool[] - 这是一种非常低效的数据存储方式,但您也可以使用BitArray 来做到这一点也,不需要任何额外的工作:

var bytes = ConvertHexStringToByteArray("A5");
var bits = new BitArray(bytes);
bool[] arr = new bool[bits.Length];
bits.CopyTo(arr, 0);
for (int i = 0; i < arr.Length; i++)
    Console.WriteLine(arr[i]);

您也可以修改 ConvertHexStringToByteArray 以在内部进行一些数学运算,但是...这可能不是一个好主意。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2012-01-24
    • 1970-01-01
    • 2015-05-26
    • 2014-03-07
    • 1970-01-01
    • 2018-01-31
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多