我有一个String,看起来像:
string a = "1AD9B1E7D11FEA4F4C89493E1";
现在我想在每第4个字符后拆分此字符串,以便在拆分后它看起来像这样:
string[] splitted = { "1AD9", "B1E7", "D11F", "EA4F", "C894", "93E1" };
然后我想将这些字符串中的每一个转换为int,所以我基本上需要将十六进制转换为int(我认为) 然后我想用这些整数做一些数学运算然后最后将它转换回" string"或十六进制,然后将不同的字符串放在一起,这样我就像一开始就有一个字符串。提前谢谢:)
答案 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();