文章目录
通常情况下,如果要将1024或者3.14这样的字符串转换成对应数据类型的值,只需要int.Parse或者.Parse就可以了。如果输入是数组,没有问题,分一下就可以了,例如
string test = "5,2,0";
int i = 0;
foreach(var item in test.Split(','))
bs[i++] = int.Parse(item);
而且没有转换十六进制的压力,只是
int.Parse("AB", System.Globalization.NumberStyles.HexNumber);
在C#中,Parse是一个非常统一的函数。 int、uint等数据类型都提供parse函数,将字符串转换成对应的数据类型。
但是解析并不安全。 如果输入的参数不符合要求,就会报错,程序会崩溃。 比如将abc转换成整数显然是不可能的。所以C#提供了一种不报错的转换方案,即它的用法如下
int intOut;
while (true)
{
string? str = Console.ReadLine();
if (int.TryParse(str, out intOut))
Console.WriteLine($"您输入了数字{str}");
else
Console.WriteLine("输入不合法");
}
效果是
1234
您输入了数字1234
asdf
输入不合法
在实际应用中,将十六进制字符串转换为字节数组是很常见的需求。 如果使用byte.Parse,相对来说比较麻烦。 这时候就需要用到一个更高级的转换函数,它的调用非常简单。 ,首先演示单个值的转换
int intOut = Convert.ToByte("AB", 16);
16表示十六进制,一系列函数,支持2、8、10、16。
它还支持从其他类型到字符串的转换。 仍然以十六进制转换为例,以下代码输出为19。
string str = Convert.ToString(25, 16);
Console.WriteLine(str);
不过上面这些单个值和字符串之间的转换其实并没有体现出这个静态类的强大,提供的最方便的功能其实就是字节数组和字符串之间的转换,例如
var bs = Convert.FromHexString("6400");
foreach (var item in bs)
Console.WriteLine(item);
它的返回结果是
100
0
其中0x64十进制为100,0x00为0。
战斗
在日常使用中,十六进制字节数组往往写成0xAA、0xBB的形式。 通过。 函数,字节数组可以输出为这种格式的字符串
string str = "";
byte[] bs = new byte[] { 1, 15, 100, 127 };
foreach (var b in bs)
str += $"0x{b:X},"; // $字符串和Format函数语法十分相似
Console.WriteLine(str);
输出是
0x01,0x0F,0x64,0x7F,
如果要将其还原为字节数组,有两种选择。 一种是拆分成一个字符串数组,逐一调用byte.Parse,但是更好的方法是直接去掉0x,然后调用
str = str.Replace("0x", "").Replace(",", "");
bs = Convert.FromHexString(str) ;
foreach (var b in bs)
Console.WriteLine(b);
效果如下
1
15
100
127