将字符串转换为整数

时间:2015-11-03 22:19:21

标签: c#

我有一个String,看起来像:

string a = "1AD9B1E7D11FEA4F4C89493E1";

现在我想在每第4个字符后拆分此字符串,以便在拆分后它看起来像这样:

string[] splitted = { "1AD9", "B1E7", "D11F", "EA4F", "C894", "93E1" };

然后我想将这些字符串中的每一个转换为int,所以我基本上需要将十六进制转换为int(我认为) 然后我想用这些整数做一些数学运算然后最后将它转换回" string"或十六进制,然后将不同的字符串放在一起,这样我就像一开始就有一个字符串。提前谢谢:)

3 个答案:

答案 0 :(得分:0)

转换为字符串数组:

string a = "1AD9B1E7D11FEA4F4C89493E1";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < a.Length; i++)
{
    if (i % 4 == 0 && i != 0)
        sb.Append(' ');
    sb.Append(a[i]);
}
string formatted = sb.ToString();
string[] splitted = formatted.Split(' ');

上面只是每隔4个字符插入一个空格,然后在空格处分割字符串

转换为int:

foreach(string s in splitted){
    int num = Int32.Parse(s, System.Globalization.NumberStyles.HexNumber);
    //do what you want with num
}

要转换回十六进制,您可以使用:

string someString = someInteger.ToString("X4");

x4只表示字符串长度为4位

这是一个工作示例,它只打印转换后的int和转换后的十六进制值:

            string a = "1AD9B1E7D11FEA4F4C89493E1";
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < a.Length; i++)
            {
                if (i % 4 == 0 && i != 0)
                    sb.Append(' ');
                sb.Append(a[i]);
            }
            string formatted = sb.ToString();
            string[] splitted = formatted.Split(' ');

            foreach(string s in splitted){
                int num = Int32.Parse(s, System.Globalization.NumberStyles.HexNumber);
                Console.WriteLine(num);
                string someString = num.ToString("X4");
                Console.WriteLine(someString);
            }

答案 1 :(得分:0)

首先是拆分字符串。这可以使用for循环以及Skip()Take()轻松完成。我使用这种方法,因为如果你的字符串长度不是4 Substring()的倍数将不会捕获任何结束字符。另外,我使用List<string>进行拆分,因为我不知道输入字符串是否是固定长度。如果它是固定长度,您可以使用string[]轻松替换它。

var splitted = new List<string>();

for(int i = 0; i < a.Length; i += 4)
{
    var s = new string(a.Skip(i).Take(4).ToArray());
    splitted.Add(s);
}

然后,您可以将数字解析为整数,并对每个数字进行计算,并将它们存储到新的List<int>

var numbers = new List<int>();

foreach (var item in splitted)
{
    var n = int.Parse(item, System.Globalization.NumberStyles.HexNumber);

    int result = // Do whatever you need to do to each number.

    numbers.Add(result);
}

之后,您可以遍历数字并使用StringBuilder重建字符串。

StringBuilder sb = new StringBuilder();

foreach(var item in numbers)
{
    sb.Append(item.ToString("X"));
}

然后致电

sb.ToString();

获取你的结果字符串。

如果您需要数字直接进行数学运算,您只需将数字存储在numbers列表中,然后根据需要进行计算。然后,您可以在最终的foreach循环中遍历这些计算的结果,而不是获得重建的字符串。

答案 2 :(得分:0)

不妨让我对这个问题有所了解

            string hex = "0123456789ABCDEF";
            string a = "1AD9B1E7D11FEA4FC89493E1";
            int[] nibbles = a.Select(x => hex.IndexOf(x)).ToArray();
            List<UInt16> results = new List<ushort>();
            for (int i = 0; i < nibbles.Count(); i += 4)
            {
                results.Add((ushort)((nibbles[i] << 12) | (nibbles[i + 1] << 8) | (nibbles[i + 2] << 4) | nibbles[i + 3]) );
            }​
            string[] test = results.Select(x => x.ToString("X4")).ToArray();​