C#数据类型转换--string字符串和byte数组互转

一、类型转换实例

将文本框中输入的string字符串转换为形同内容的byte数组:

1、C#内置的Convert类方法
Convert.ToByte(value) 将指定类型转换为 Byte
2、依次获取字符串中的2个字符转换成byte

static byte[] StringToByteArray(string hex)
{
    if (hex.Length % 2 != 0)
        throw new ArgumentException(hex + " is not a valid hex string!");
    byte[] ret = new byte[hex.Length / 2];
    for (int i = 0; i < ret.Length; i++)
    {
        ret[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
    }
    return ret;
}

将byte数组转换为字符串方法1

1、C#内置的Convert类方法;
Convert.ToString(value) 将指定类型转换为string
2、依次获取byte数组中的元素并转换成string[]字符串数组;
3、将字符串数组转换为字符串;

 static string ByteArrayToString(byte [] hex)
    {
        StringBuilder resulet = new StringBuilder(hex.Length);
        foreach (byte b in hex)
        {
            resulet.Append( b.ToString("X2"));
        }
        return resulet.ToString();
    }

将byte数组转换为字符串方法2

1、C#内置的类方法;
hex.ToString(value) 将指定类型转换为string
2、依次获取byte数组中的元素并转换成string[]字符串数组;
3、将字符串数组转换为字符串;

static string ByteArrayToString1(byte[] hex)
{
string[] resulet = new string[hex.Length];

for (int i = 0; i < hex.Length; i++)
{
    resulet[i] = hex[i].ToString("X2");  //tring res1 = Convert.ToString();
}
string resultString = string.Join(" ", resulet);
return resulet.ToString();

}

将byte数组转换为字符串方法3

   string result1 = string.Join(" ", byteArray.Select(b => b.ToString("X2")));

二、 相关知识点

相关知识点1:

StringBuilder和String 对比
String 类:

不可变性:字符串是不可变的,每次对字符串进行修改(如拼接、替换等)时,都会创建一个新的字符串实例。
内存分配:由于不可变性,每次字符串操作都需要在内存堆中为新字符串分配空间,这会导致频繁的内存分配和垃圾回收。
性能:对于单个或少量的字符串操作,性能影响可能不大。但在大量或频繁的字符串连接操作(尤其是循环中),会产生大量的中间字符串,严重影响性能。
StringBuilder 类:

可变性:StringBuilder 是可变的,可以在原对象上直接修改内容,不会生成新的对象。
内存效率:它预先分配了一定大小的缓冲区,并且可以根据需要动态扩展容量,减少了内存分配次数,从而提高了内存使用效率。
性能:适用于处理多个字符串拼接的情况,尤其是在循环或其他需要多次修改字符串的场景下,其性能远优于 String 类。

相关知识点2:

foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。
foreach (byte b in hex)
该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面
的执行语句。

foreach语句经常与数组一起使用,下面实例将通过foreach语句读取数组的值并进行显示。
数组的属性:Array.Length数组的容量
利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。
当数组的维数、容量较多时,C#提供了foreach语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:
遍历数组:foreach(type objName in collection/Array)
这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型,而objName是定义了一个type类型的变量名,代表每一次从集合和数组(collection/Array)中取得的元素,collection/Array则是所要存取的数组对象。用这种方法只需写一个foreach就可以遍历出除交错数组以外的所有维数的数组。
必须注意的是,借助foreach,只能一一取得数组中的元素,并不能利用这种语句改变数组所存储的元素。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值