7. 各种数值类型和字节数组之间的转换
在第 1 条中我们可以查到各种数值型需要使用多少字节的空间来保存数据。将某种数值类型的数据转换成字节数组的时候,得到的一定是相应大小的字节数组;同样,需要把字节数组转换成数值类型,也需要这个字节数组大于相应数值类型的字节数。 现在介绍此类转换的主角:System.BitConverter。该类提供了 byte[] GetBytes(...) 方法将各种数值类型转换成字节数组,也提供了 ToInt32、ToInt16、ToInt64、ToUInt32、ToSignle、ToBoolean 等方法将字节数组转换成相应的数值类型。
由于这类转换通常只是在需要进行较细微的编码/解码操作时才会用到,所以这里就不详细叙述了,仅把 System.BitConverter 类介绍给大家。
8. 转换成十六进制
任何数据在计算机内部都是以二进制保存的,所以进制与数据的存储无关,只与输入输出有关。所以,对于进制转换,我们只关心字符串中的结果。 在上面的第 4 条中提到了 ToString() 方法可以将数值转换成字符串,不过在字符串中,结果是以十进制显示的。现在我们带给它加一些参数,就可以将其转换成十六进制——使用 ToString(string) 方法。 这里需要一个 string 类型的参数,这就是格式说明符。十六进制的格式说明符是 x 或者 X,使用这两种格式说明符的区别主要在于 A-F 六个数字:x 代表 a-f 使用小写字母表示,而 X 而表示 A-F 使用大字字母表示。如下例:
private void TestHex() { int a = 188; this.textBox1.Text = ; this.textBox1.AppendText(a(10) = + a.ToString() + \n); this.textBox1.AppendText(a(16) = + a.ToString(x) + \n); this.textBox1.AppendText(a(16) = + a.ToString(X) + \n); }
运行结果如下:
a(10) = 188 a(16) = bc a(16) = BC
这时候,我们可能有另一种需求,即为了显示结果的整齐,我们需要控制十六进制表示的长度,如果长度不够,用前导的 0 填补。解决这个问题,我们只需要在格式说明符“x”或者“X”后写上表示长度的数字就行了。比如,要限制在 4 个字符的长度,可以写成“X4”。在上例中追加一句:
this.textBox1.AppendText(a(16) = + a.ToString(X4) + \n);
其结果将输出 a(16) = 00BC。 现在,我们还要说一说如何将一个表示十六进制数的字符串转换成整型。这一转换,同样需要借助于 Parse() 方法。这里,我需要 Parse(string, System.Globalization.NumberStyles) 方法。第一个参数是表示十六进制数的字符串,如“AB”、“20”(表示十进制的 32) 等。第二个参数 System.Globalization.NumberStyles 是一个枚举类型,用来表示十六进制的枚举值是 HexNumber。因此,如果我们要将“AB”转换成整型,就应该这样写:int b = int.Parse(AB, System.Globalization.NumberStyles.HexNumber),最后得到的 b 的值是 171。
页次:6/8 1篇/页 首页 上一页 下一页 尾页 合计 8 篇 Go: |