C#中实现字符串进制转换的最佳实践

桃夭
桃夭
发布时间:2026-10-15| 4人浏览过
原创

在C#开发中,经常需要将数据在十进制、二进制、十六进制以及字符串类型之间进行转换。本文汇总了最常用的内置转换方法,包括使用 Convert 类处理整数进制的互转,利用 BitConverter 类处理浮点数与字节数组,以及通过 PadLeft 等方法控制输出格式的实战示例。

C# 通用进制转换实现

如果需要封装一个支持多进制互相转换的工具方法,可以通过定义输入来源基数和目标基数来实现逻辑分发。以下代码展示了如何将二进制、八进制、十进制和十六进制字符串转换为指定的其他进制格式。

public string ConvertGenericBinary(string input, byte fromType, byte toType)
{
    string output = input;
    switch (fromType)
    {
        case 2:
            // 从二进制转换
            output = Convert.ToString(Convert.ToInt32(input, 2), toType);
            break;
        case 8:
            // 从八进制转换
            output = Convert.ToString(Convert.ToInt32(input, 8), toType);
            break;
        case 10:
            // 从十进制转换
            output = Convert.ToString(Convert.ToInt32(input), toType);
            break;
        case 16:
            // 从十六进制转换
            output = Convert.ToString(Convert.ToInt32(input, 16), toType);
            break;
    }
    return output;
}

上述逻辑中,核心思路是先将输入字符串解析为内部的整型数值,再将该数值格式化为目标进制的字符串。这种方法避免了冗长的多重判断分支。

基础进制转换速查

掌握以下核心 API 是处理进制转换的基础:

数字转字符串:Convert.ToString

将数字转换为指定基数的字符串表示形式。

// 十进制 3 转为二进制字符串 "11"
string binStr = Convert.ToString(3, 2);

// 十进制 15 转为十六进制字符串 "f"
string hexStr = Convert.ToString(15, 16); 
// 或者使用格式化方法
string hexStr2 = string.Format("{0:x}", 15); // 结果为小写 "f"

字符串转数字:Convert.ToInt32

将指定基数的字符串表示形式转换为等价的 32 位有符号整数。

// 二进制字符串 "1111" 转为十进制整数 15
int val = Convert.ToInt32("1111", 2);

// 十六进制字符串 "F" 或 "f" 转为整数 15
int valHex = Convert.ToInt32("F", 16); 
// 注意区分大小写通常不影响数值结果,但需符合规范

常用操作技巧与补充

1. 字符串位数补齐

在数据处理时,常要求固定长度的进制串,左侧不足可用 PadLeft,右侧可用 PadRight。

// 十进制 3 转为二进制,左侧补零至4位,结果为 "0011"
string padded = Convert.ToString(3, 2).PadLeft(4, '0');

// 十六进制 F 转为二进制,左侧补零至8位,结果为 "00001111"
string paddedHex = Convert.ToString(0xF, 2).PadLeft(8, '0');

2. 字符与整数的 ASCII 转换

字符在计算机内部以整数(ASCII码)存储,可进行相互转换。

// 字符 'A' 转换为整数 65
int asciiVal = Convert.ToInt32('A');

// 字符串中取首字母并转ASCII
string text = "AB";
int firstCharAscii = Convert.ToInt32(text[0]); // 结果为 65

3. int 与 string 的标准互转

// int 49 转字符串 "49"
string str = (49).ToString();

// 字符串 "31" 转 int 31
int i = Convert.ToInt32("31");

4. Byte/Short 与 Int 的类型转换

// byte 转 int
byte bt = 0x31; // 49
int n = Convert.ToInt32(bt);

// 带前缀格式的输出
int num = 49;
string hexWithPrefix = num.ToString("x"); // 输出 "31",若需要前缀可使用自定义字符串格式化
// 实际上 .NET 没有直接带 0x 前缀的内置标准格式化,通常手动拼接或使用 ToString("X") 后加 "0x"

高级类型转换:浮点数与字节数组

当涉及网络传输、文件读取或底层协议解析时,经常需要将浮点数(float/double)转换为字节数组或反之,此时推荐使用 BitConverter 类。

浮点数与字节数组互转

// 浮点数转十六进制字节串
float f = 0.68f;
// GetBytes 返回 byte[],ToString 默认用 "-" 连接
string bytesStr = BitConverter.ToString(BitConverter.GetBytes(f)); 
// 去除连字符得到纯十六进制字符串
string cleanHex = bytesStr.Replace("-", ""); // 如 "7B142E3F"

// 字节数组转浮点数
byte[] bt = new byte[4] { 0x3F, 0x2E, 0x14, 0x7B }; // 注意顺序可能受平台字节序影响
float result = BitConverter.ToSingle(bt, 0);

ushort[] 与 float 的组合转换

在某些特定协议中,浮点数可能被拆分为两个 ushort 传输。

// ushort 数组组合转 float
ushort[] valArr = new ushort[2];
valArr[0] = ...; // 低字节部分
valArr[1] = ...; // 高字节部分
List<byte> allBytes = new List<byte>();
allBytes.AddRange(BitConverter.GetBytes(valArr[0]));
allBytes.AddRange(BitConverter.GetBytes(valArr[1]));
float finalFloat = BitConverter.ToSingle(allBytes.ToArray(), 0);

// float 拆分为 ushort 数组
float value = 1.0f;
byte[] rawBytes = BitConverter.GetBytes(value);
ushort lowOrderValue = BitConverter.ToUInt16(rawBytes, 0); // 注意字节序
ushort highOrderValue = BitConverter.ToUInt16(rawBytes, 2);

完成判断与注意事项

  1. 异常处理: Convert.ToInt32(str, base) 在传入非法字符(如二进制字符串含 '2')时会抛出异常,实际生产中建议结合 int.TryParse 或正则校验。
  2. 大小端模式: 在使用 BitConverter 处理字节数组与数值互转时,需注意不同 CPU 架构的字节序(Endianness)差异,跨平台交互时需确认字节排列顺序。
  3. 返回值类型: Convert.ToString 返回的是 string,Convert.ToInt32 返回的是 int,根据业务需求选择是否需要进行二次装箱或转换。

以上就是 C# 实现字符串及数值进制转换方法的详细内容,更多关于 C# 数据类型转换及位运算的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。