我在编码方面确实是新手,但是我的问题是如何将代码“ 7900BD7400BD7500BD76A5FF”划分为“ 79 00 BD 74 00 BD 75 00 BD 76 A5 FF”。我的主要问题是将十六进制转换为ascii,但是我得到的任何解决方案都只能转换“短”表达式。也许有人可以给我一些建议?我会很感激
答案 0 :(得分:0)
由于您似乎不太了解字符串处理,因此我将举一个示例,该示例不需要您一次学习太多内容:
string input = "7900BD7400BD7500BD76A5FF";
string output = string.Empty;
for(int i=0; i<input.Length; i+=2) // Go in steps of 2
{
output += input[i]; // The first of 2 characters
output += input[i+1]; // The second of 2 characters
output += ' '; // The space
}
Console.WriteLine(output);
请注意,此解决方案仅在第二个字符后插入空格。它不检查这些代码是否都是十六进制代码,也不检查其长度是否为2的倍数。它假定之前的任何代码都会生成有效的结果。您应该确保使用单元测试。
这种方法对于长字符串来说不是很有效(如果您有长文本,请了解StringBuilder)。
如果您遵循this advice for creating the hex data,那么立即插入空格当然会容易得多:
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:X2} ", b); // <-- I inserted a space in the format string
return hex.ToString();
}
答案 1 :(得分:0)
更一般的解决方案:
static String SeparateBy(
this string str,
string separator,
int groupLength)
{
var buffer = new StringBuilder();
for (var i = 0; i < str.Length; i++)
{
if (i % groupLength == 0)
{
buffer.Append(separator);
}
buffer.Append(str[i]);
}
return buffer.ToString();
}
您会这样称呼它:"7900BD7400BD7500BD76A5FF".SeparateBy(" ", 2)
在可能的情况下(如果相对容易的话),请尝试概括方法,以便可以更频繁地重用它们。当然,如果事情开始变得复杂化,泛化可能会导致自我挫败……知道何时或何时不进行泛化是一种技巧,您将逐渐掌握。