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

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

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

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

//将文本转为字符串
{
    ...
    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命名空间下;

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

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

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

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

16进制数组无法直接打印和显示(否则会出现乱码),这就需要转成对应的字符串;


//利用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进制数组;


//str为过滤之后的字符串,只包含字母和数字

string strTemp = "";

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

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

二者互转又多了一层。

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

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

5、其它常见转换操作

5.1 字符串替换

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

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

5.2 格式转换

//Encoding为编码格式转换
//Convert为数据格式转换

//常见的转换有

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

猜你喜欢

转载自blog.csdn.net/weixin_38743772/article/details/128653936
今日推荐