转换进制方法一

一、十进制转换为十六进制

1
2
int a = 654;
string A = a.ToString("X6");

上面Tostring(“X6”)是将整型a转化成16进制数;

其中:

(1) “x”小写输出十六进制的的字母为小写字母,”X”大写则输出的十六进制字母为大写;

(2) 后面的数字6是表示自动补0补足6位;

二、十六进制转为十进制

1
var a = Convert.ToInt64(A, 16);

将十六进制数A转化为整型a

其中:

(1)var关键字:匿名类型,可以代替任何类型

(2) ToInt64(String value,Int frombase)是Convert里面的一个方法,是将制定技术的数字的字符串表示形式转换为等效的64位有符号整数,Value是需要转化的字符串,frombase是数字基数,即2,8,10,16,这里是将16进制转化,所以是16

将整数转换为十六进制

将整数转换为十六进制

可以使用string.ToString()扩展方法将整数转换为十六进制。

1
2
Integer Value: 500
Hexadecimal Value: 1F4

将十六进制转换为整数-

可以使用int.Parse或convert.ToInt32将十六进制值转换为整数

**int.Parse-**将数字的字符串表示形式转换为其等效的32位有符号整数。返回值指示操作是否成功。

1
2
Hexadecimal Value: 1F4
Integer Value: 500

**Convert.ToInt32-**将指定的值转换为32位带符号整数。

1
2
Hexadecimal Value: 1F4
Integer Value: 500

将整数转换为十六进制-

字符串hexValue = integerValue.ToString(“ X”);

示例

1
2
3
4
5
6
7
8
9
10
11
12
using System;
namespace DemoApplication{
public class Program{
public static void Main(){
int integerValue = 500;
Console.WriteLine($"Integer Value: {integerValue}");
string hexValue = integerValue.ToString("X");
Console.WriteLine($"Hexadecimal Value: {hexValue}");
Console.ReadLine();
}
}
}

输出结果

上面代码的输出是

1
2
Integer Value: 500
Hexadecimal Value: 1F4

将十六进制转换为整数-

使用int.Parse的示例-

示例

1
2
3
4
5
6
7
8
9
10
11
12
using System;
namespace DemoApplication{
public class Program{
public static void Main(){
string hexValue = "1F4";
Console.WriteLine($"Hexadecimal Value: {hexValue}");
int integerValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine($"Integer Value: {integerValue}");
Console.ReadLine();
}
}
}

输出结果

上面代码的输出是

1
2
Hexadecimal Value: 1F4
Integer Value: 500

使用Convert.ToInt32的示例-

示例

1
2
3
4
5
6
7
8
9
10
11
12
using System;
namespace DemoApplication{
public class Program{
public static void Main(){
string hexValue = "1F4";
Console.WriteLine($"Hexadecimal Value: {hexValue}");
int integerValue = Convert.ToInt32(hexValue, 16);
Console.WriteLine($"Integer Value: {integerValue}");
Console.ReadLine();
}
}
}

输出结果

上面代码的输出是

1
2
Hexadecimal Value: 1F4
Integer Value: 500

数据互转 16进制&16进制字符串&字符串

1、字符串过滤 or 提取字符串

提取字符串:在C# .net开发中 “ToString()”方法是最常见的,用于将文本转为字符串;

字符串过滤:在处理字符串数据或者hex数据时,一般都需要去掉 空格 数组标识0x 标点符号 等等字符,方便后续进一步处理;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//将文本转为字符串
{
...
string str = textBox1.Text.ToString();
...
}


//过滤字符串
{
string pattern = "[A-Za-z0-9]";
string strRet = "";

//正则匹配,只保留字母和数字
MatchCollection results = Regex.Matches(ReadString(), pattern);
foreach (var v in results)
{
strRet += v.ToString();
}

return strRet.Replace("0x", "");
}

2、字符串与16进制数组互转

从字符串转16进制数组,字符串的每一个字符就是一个byte;

可以用Encoding类的方法完成格式转换,Encoding位于System.Text命名空间下;

1
2
//str为输入字符串
byte[] bytes = Encoding.Default.GetBytes(str);

同样的,字节数组转字符串;

1
2
//bytes为输入字节数组
string str = Encoding.Default.GetString(bytes);

3、16进制数组与16进制字符串互转

  • 16进制数组无法直接打印和显示(否则会出现乱码),这就需要转成对应的字符串;
1
2
3
4
5
6
7
8
9
10
11
 
//利用for循环将16进制数组转成对应的16进制字符串
//如 0x7E,0x5D,0x5A => "7E5D5A"

string strTemp = "";

for (int i = 0; i < bytes.Length; i++)
{
strTemp += bytes[i].ToString("X2");
strTemp += " ";
}

一般对于嵌入式硬件底层,收到的数据都是字节流,不需要转换,可以直接处理;

但是对于PC、Android等非底层驱动,拿到的数据都是字符串形式,这就需要将16进制字符串转16进制数组;

1
2
3
4
5
6
7
8
9
10
 
//str为过滤之后的字符串,只包含字母和数字

string strTemp = "";

for (int i = 0; i < str.Length/2; i++)
{
strTemp += str.Substring(2 * i, 2);
strTemp += " ";
}

4、字符串与16进制字符串

二者互转又多了一层。

  1. 字符串转16进制字符串:先将字符串转为16进制数组,再将16进制数组转为16进制字符串;

  2. 16进制字符串转字符串:先将16进制字符串转为16进制数组,再将16进制数组转为字符串;

5、其它常见转换操作

5.1 字符串替换
小节1中介绍了正则匹配来过滤字符串的方法,string类本身也有很多方法实现过滤和替换

1
2
//去掉字符串中的控制字符
string str2 = str1.Replace(" ", "").Replace(",", "").Replace("\t", "").Replace("\n", "").Replace("\r", "");

5.2 格式转换

1
2
3
4
5
6
7
8
9
10
11
12
//Encoding为编码格式转换
//Convert为数据格式转换

//常见的转换有

Convert.ToByte();
Convert.ToUInt16();
Convert.ToUInt32();
Convert.ToUInt64();
Convert.ToDateTime();
Convert.ToString();
Convert.ToBase64String();

相关链接(侵删)

  1. C#中十进制与十六进制之间的转换
  2. 如何在C#中将整数转换为十六进制,反之亦然?
  3. C# 数据互转 16进制&16进制字符串&字符串

=================我是分割线=================

欢迎到公众号来唠嗑: