我尝试将表示十六进制值的字符串(例如"A0F3"
)转换为十六进制或byte
值。我试着做这样的事情:
string text = "A0F3";
char[] chars = text.ToCharArray();
StringBuilder stringBuilder = new StringBuilder();
foreach(char c in chars)
{
stringBuilder.Append(((Int16)c).ToString("x"));
}
String textAsHex = stringBuilder.ToString();
Console.WriteLine(textAsHex);
但显然我没有将最终值转换为byte
值,我被卡住了。
我感谢你的帮助。
答案 0 :(得分:1)
Convert.ToInt32
有一个以基数为参数的重载。
Convert.ToInt32("A0F3",16)
应该会产生预期的结果。
但是,如果您想将其自己编码为练习,则通用算法为:每个字符对应一个4位值。将每个字符转换为它的值,并通过向左移动位来创建一个整数。这可能是一般算法,请不要在不添加边界检查,0x
前缀支持等的情况下使用(并且你真的应该使用生成代码的框架内置函数) - 但是这里有:
public static int FromHexString(string hex)
{
int value = 0;
foreach (char c in hex.ToUpperInvariant().Trim())
{
var n = c >= '0' && c <= '9' ? c - '0' : c - 'A' + 10;
value = (value << 4) | n;
}
return value;
}