484 字
2 分钟
[C#] 二进制, 十进制, 十六进制, 进制转换

在源码中:#

C# 中允许在代码中使用 0x 开头的十六进制数字, 以及 0b 开头的二进制数字来表示一个整数. 下面的语法是合理的.

int a = 123;
int b = 0xFF;
int c = 0b10010;

从数字转换#

将一个数字转换为某进制的字符串, 有两种方式:

// 第一种: 使用 Convert 类. 可转换为 二进制 八进制 十进制 十六进制
Convert.ToString(10, 2);      // 二进制, 返回 "1010"
Convert.ToString(10, 8);      // 八进制, 返回 "12"
Convert.ToString(10, 10);     // 十进制, 返回 "10"
Convert.ToString(10, 16);     // 十六进制, 返回 "a"

// 第二种: 使用对象的 ToString() 方法. 只能转换为 十六进制
10.ToString("x");             // 返回 "a"
10.ToString("X");             // 返回 "A"
10.ToString("x2");            // 返回 "0a"
10.ToString("X2");            // 返回 "0A"

// 第三种: 使用 String 的静态方法 Format, 只能转换为 十六进制
string.Format("{0:x}", 10)    // 返回 "a"
string.Format("{0:X}", 10)    // 返回 "A"
string.Format("{0:x2}", 10)   // 返回 "0a", 即填充至宽2
string.Format("{0:X2}", 10)   // 返回 "0A", 同样填充

从字符串转换#

将字符串转换为对应的数据, 有两种方式

// 第一种: 使用 Convert类. 可转换 二进制 八进制 十进制 十六进制, 这里以 int 为例
Convert.ToInt32("1010", 2);   // 二进制, 返回 10
Convert.ToInt32("12", 8);     // 八进制, 返回 10
Convert.ToInt32("10", 10);    // 十进制, 返回 10
Convert.ToInt32("A", 16);     // 十六进制, 返回 10
// 第二种: 使用对应数据类型的 Parse 方法, 只支持 十六进制, 这里以 int 为例
int.Parse("A", NumberStyles.HexNumber);  // 返回 10

从字符数组转换#

最常用的就是将字符数组转换为十六进制字符串了, Linq 可以帮到我们许多

byte[] array; // 假定这个数组有值

// 第一种: 对应上面的 Convert 类静态方法, 也是个人比较推荐的
string.Join(null, array.Select(v => Convert.ToString(v, 16).PadLeft(2, '0')));      // 返回小写的

// 第二种: 对应格式化方法
string.Join(null, array.Select(v => v.ToString("X2")));

// 第三种: 对应 String 静态 Format 方法
string.Join(null, array.Select(v => string.Format("{0:X2}", v)));
[C#] 二进制, 十进制, 十六进制, 进制转换
https://slimenull.com/posts/20210406223759/
作者
SlimeNull
发布于
2021-04-06
许可协议
CC BY-NC-SA 4.0