2015-11-03 217 views
-3

我有一个字符串,它看起来像:将字符串转换为整数

string a = "1AD9B1E7D11FEA4F4C89493E1"; 

,现在我想每4个字符后,这个字符串分割,使得它看起来像这样的分裂之后:

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

然后我想要将每个这些字符串转换为一个int,所以我基本上需要将十六进制转换为int(我认为) 然后我想用这些int做一些数学运算,然后将其转换回来以“串”或十六进制,然后把不同的字符串放在一起,这样我就有了字符串就像在开始时一样。在此先感谢:)

+5

你应该表现出你尝试过这么远。否则你的问题属于类别'给我teh codez',应该关闭 – Steve

+0

添加到博文 –

+0

请包括在问题中编辑你的文章... – aschipfl

回答

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); 
      } 
+0

没问题从INT转换为十六进制作品谢谢:)但从分裂字符串转换为int崩溃:( –

+0

我编辑了我的答案,只是意识到我没有涵盖spliiting单词到数组 –

+0

再次编辑,将for循环更改为一个foreach循环,现在应该可以工作:) –

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循环中遍历这些计算的结果,而不是获取重建的字符串。

0

还不如让我的两个检测到这个问题

  string hex = "ABCDEF"; 
      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();​