2

是否可以将 HEX 字符串转换为整数数组?

// This string...
string a = "8FCC44";

// Should look like this:
int[] b = {0x8f,0xcc,0x44};

但我不知道如何做到这一点。

我找到了这个问题,但我无法理解答案。我是 C# 新手,所以如果有人能给我一个例子,那就太好了。

提前致谢!

4

4 回答 4

2
int[] ConvertToIntArray(string a)
{
    List<int> x = new List<int>();
    for(int i=0; i<a.Length-1; i+=2)
        x.Add(int.Parse(a.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));

    return x.ToArray();
}

然后,您可以使用 int (Int32) 类的 ToString() 重载将它们打印为十六进制或十进制。

于 2013-03-20T10:25:25.797 回答
2

其他方式:

var a = "8fcc44";
var b = Enumerable.Range(0, a.Length / 2).Select(x => 
          Convert.ToInt32(a.Substring(x * 2, 2), 16)).ToArray();
于 2013-03-20T10:40:52.440 回答
0
        static void Main(string[] args)
        {
            string a = "8fcc44";            
            int itemNumber = 0;
            int[] iArray = new int[3];
            for (int i = 0; i < a.Length - 1; i += 2)
            {
                iArray[itemNumber] = (int.Parse(a.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));
                itemNumber++;
            }
        }
于 2013-03-20T10:29:15.997 回答
0

答案侧重于 Java,但也可以在 C# 中以类似的方式执行此操作。基本上,您必须将字符串划分为子字符串,每 2 个字符长:

"8FCC44" -> "8F", "CC", "44"

您可以使用for循环执行此操作:

for (int i = 0; i < a.Length; i += 2)

循环变量i表示当前子字符串的起始索引,这就是为什么它总是增加 2。我们可以使用以下方法转换每个子字符串Int32.Parse

Convert.ToInt32(a.Substring(i, 2), 16);

最后一个参数表示源字符串的基数(HEX = 基数 16)。

现在我们需要一个数组来存储结果。数组的大小可以通过字符串的长度除以每个子字符串的长度(= 2)来计算:

int[] b = new int[a.Length / 2];

要将它们组合在一起,您的代码可能如下所示:

string a = "8FCC44";
int[] b = new int[a.Length / 2];

for (int i = 0, int j = 0; i < a.Length; i += 2, j++)
    b[j] = Convert.ToInt32(a.Substring(i, 2), 16);

希望这可以帮助!

于 2013-03-20T10:33:49.073 回答