C#进制转换

16进制字符串转16进制字节数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/// <summary>
/// 16进制字符串转16进制字节数组
/// </summary>
/// <param name="hexString">16进制字符串</param>
/// <param name="size">16进制字符串的补齐位数,必须是偶数</param>
/// <returns></returns>
public static byte[] StrToToHexByte(string hexString, int size)
{
if (hexString.Contains("0x"))
{
hexString = hexString.Replace("0x", "");
}
hexString = hexString.Replace(" ", "").PadLeft(size, '0');
 
byte[] returnBytes = new byte[hexString.Length / 2];
try
{
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}catch(Exception ex)
{
returnBytes[0] = 0x00;
}
return returnBytes;
}
 
/// <summary>
/// 16进制字符串转16进制字节数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] StrToToHexByte(string hexString)
{
hexString = hexString.Replace("0x", "");
byte[] returnBytes = new byte[hexString.Length / 2];
try
{
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
catch (Exception ex)
{
returnBytes[0] = 0x00;
}
return returnBytes;
}

字节数组转16进制字符串

1
2
3
4
5
6
7
8
9
10
11
12
public static string ByteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2").PadLeft(2, '0');
}
}
return returnStr;
}

字节数组转字符串,使用空格分隔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
/// 字节数组转为字符串,使用空格分隔
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string ByteToString(byte[] bytes)
{
string str = ByteToHexStr(bytes);
string data = "";
for (int i = 0; i < str.Length-1; i += 2)
{
data += str[i].ToString() + str[i + 1].ToString() + " ";
}
return data;
}

把字节数数组(高字节在前)转换为Int32类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <summary>
/// 把字节数数组转换为Int32类型,高低字节转换
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static Int32 ByteToInt32(int start, int end, byte[] data)
{
Int32 value = 0;
byte[] array = new byte[end - start + 1];
for (int i = start,j = array.Length-1; i <= end && j >= 0; i++,j--)
{
array[j] = data[i];
}
value = Convert.ToInt32(ByteToHexStr(array), 16);
return value;
}

16进制数转字节数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/// <summary>
/// 转16进制数,(高在前,低在后)
/// </summary>
/// <param name="value">待转换数值</param>
/// <param name="array">目标字节数组</param>
/// <param name="start">在目标字节数据中开始存放的位置</param>
/// <param name="count">字节位数</param>
/// <returns></returns>
public static bool ConvertToByteArray_HighToLow(Int32 value, ref byte[] array, int start, int count)
{
if (array == null)
{
return false;
}
if (array.Length < start + count)
return false;
 
for (int i = count - 1; i >= 0; i--)
{
array[start + i] = (byte)(value & 0xFF);
value = value >> 8;
}
return true;
}
 
/// <summary>
/// 把数据进行反转,(低在前,高在后),返回新的字节数组
/// </summary>
/// <param name="value">待转换数值</param>
/// <param name="count">字节位数,默认为2</param>
/// <returns>返回转换后的新的字节数组</returns>
public static byte[] ConvertToByteArray_LowToHigh(Int32 value, int count = 2)
{
byte[] array = new byte[count];
 
for (int i = 0; i < count; i++)
{
array[i] = (byte)(value & 0xFF);
value = value >> 8;
}
return array;
}
 
/// <summary>
/// 把数据进行反转(低在前,高在后),并且存到字节数组中
/// </summary>
/// <param name="value">待转换数值</param>
/// <param name="array">目标字节数组</param>
/// <param name="start">在目标字节数据中开始存放的位置</param>
/// <returns></returns>
public static bool ConvertToByteArray_LowToHigh(UInt32 value, ref byte[] array, int start)
{
byte[] bData = BitConverter.GetBytes(value);
//Array.Reverse(bData);
bData.CopyTo(array, start);
return true;
}
### C# 中的进制转换方法 在 C# 编程中,可以利用 `Convert` 类的方法轻松实现不同进制之间的转换。以下是详细的说明和代码示例。 #### 使用 `Convert.ToInt32` 将字符串形式的数值从指定进制转换为十进制 此方法适用于将二进制、八进制或十六进制表示的字符串转换为对应的十进制整数。其语法如下: ```csharp int result = Convert.ToInt32(value, fromBase); ``` 其中: - `value` 是要转换的字符串。 - `fromBase` 表示原始数据的进制(例如 2 表示二进制,8 表示八进制,16 表示十六进制)。 **示例:** ```csharp string binaryString = "1010"; int decimalValue = Convert.ToInt32(binaryString, 2); // 结果为 10 Console.WriteLine(decimalValue); string octalString = "12"; decimalValue = Convert.ToInt32(octalString, 8); // 结果为 10 Console.WriteLine(decimalValue); string hexString = "A"; decimalValue = Convert.ToInt32(hexString, 16); // 结果为 10 Console.WriteLine(decimalValue); ``` [^1] --- #### 使用 `Convert.ToString` 将十进制整数转换为目标进制的字符串 该方法用于将一个十进制整数转换为其对应的目标进制表示。其语法如下: ```csharp string result = Convert.ToString(value, toBase); ``` 其中: - `value` 是待转换的十进制整数。 - `toBase` 表示目标进制(例如 2 表示二进制,8 表示八进制,16 表示十六进制)。 **示例:** ```csharp int decimalNumber = 10; // 转换为二进制 string binaryResult = Convert.ToString(decimalNumber, 2); // 结果为 "1010" Console.WriteLine(binaryResult); // 转换为八进制 string octalResult = Convert.ToString(decimalNumber, 8); // 结果为 "12" Console.WriteLine(octalResult); // 转换为十六进制 string hexResult = Convert.ToString(decimalNumber, 16); // 结果为 "a" Console.WriteLine(hexResult.ToUpper()); // 如果需要大写字母,则调用 ToUpper() 方法 ``` [^3] --- #### 实现任意两个进制间的间接转换 如果需要在非十进制之间进行直接转换(如二进制到八进制),可以通过中间的十进制作为桥梁完成转换过程。具体步骤如下: 1. 首先使用 `Convert.ToInt32` 将源进制的数据转换为十进制; 2. 然后再使用 `Convert.ToString` 将十进制的结果转换为目标进制。 **示例:** ```csharp string binaryInput = "10000"; // 步骤 1: 二进制 -> 十进制 int decimalIntermediate = Convert.ToInt32(binaryInput, 2); // 结果为 16 // 步骤 2: 十进制 -> 八进制 string octalOutput = Convert.ToString(decimalIntermediate, 8); // 结果为 "20" Console.WriteLine($"二进制 {binaryInput} 转为八进制 {octalOutput}"); ``` [^4] --- #### 大整数支持 (`BigInteger`) 当涉及超出标准整型范围的大数值时,可借助 `System.Numerics.BigInteger` 来扩展进制转换的功能。以下是一个例子展示如何处理超大数据量的情况: **示例:** ```csharp using System; using System.Numerics; class Program { static void Main() { string largeBinary = "1".PadLeft(100, '1'); // 构造一个长度为 100 的全 1 字符串 // 将二进制字符串转换为 BigInteger 对象 BigInteger bigDecimal = BigInteger.Parse(largeBinary, System.Globalization.NumberStyles.AllowHexSpecifier); // 输出结果 Console.WriteLine(bigDecimal.ToString("X")); // 显示为十六进制格式 } } ``` --- ### 总结 C# 提供了强大的工具来简化各种进制之间的相互转换操作。无论是基本类型的转换还是更复杂的场景下涉及到极大数值的操作,都能通过内置函数或者第三方库高效解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值