C# BitConverter

BitConverter

BitConverterC# 中的一个类,它提供了用于字节顺序操作的方法,包括在基本数据类型(如 intfloatdouble 等)和它们的字节表示之间转换的方法。这个类在处理二进制数据、网络编程、文件 I/O 等场景中特别有用,因为它允许你以平台无关的方式处理字节顺序(大端或小端)。

以下是一些 BitConverter 类中常用的方法:

GetBytes: 将指定的值转换为字节数组。

int number = 12345;  
byte[] bytes = BitConverter.GetBytes(number);

ToInt32, ToSingle, ToDouble 等: 从字节数组的指定位置开始,将指定数量的字节转换回基本数据类型。

int number = BitConverter.ToInt32(bytes, 0); 
// 假设 bytes 是之前通过 GetBytes 得到的数组

ToInt16ToInt32ToInt64ToUInt16ToUInt32ToUInt64ToSingleToDouble 等: 这些方法用于从字节数组中的指定位置开始,将特定数量的字节转换为相应的整数或浮点数类型。
IsLittleEndian: 一个属性,用于确定当前系统的字节顺序是小端还是大端。

使用 BitConverter 时需要注意以下几点:

字节顺序(endianness):不同的系统(如 x86x64 架构的 Windows 与某些 Unix 系统)可能使用不同的字节顺序。BitConverter 默认使用运行它的机器的字节顺序。如果你正在编写跨平台的代码或处理来自不同系统的数据,你可能需要手动处理字节顺序

数据类型大小:不同的数据类型在内存中占用不同数量的字节。例如,一个 int 在大多数系统上占用 4 个字节,而一个 double 则占用 8 个字节。确保你使用正确数量的字节来转换数据类型。

性能:虽然 BitConverter 提供了方便的方法来处理字节转换,但在处理大量数据时,手动进行位操作可能会更快。根据你的具体需求,可能需要权衡方便性和性能。


大端小端

大端(Big-Endian)和小端(Little-Endian)是计算机领域中描述字节顺序(Byte Order)的两种主要方式。这两种方式决定了多字节数据(如整数或浮点数)在内存中的存储顺序

大端(Big-Endian):
在大端字节序中,最重要的字节(高位字节)存储在最低的内存地址处,而最不重要的字节(低位字节)则存储在最高的内存地址处。

例如,一个16位的整数0x1234在大端系统中会按照12 34(高位在前,低位在后)的顺序存储。

小端(Little-Endian):
在小端字节序中,最不重要的字节(低位字节)存储在最低的内存地址处,而最重要的字节(高位字节)则存储在最高的内存地址处。

同样以16位的整数0x1234为例,它在小端系统中会按照34 12(低位在前,高位在后)的顺序存储。


转16进制

C#中,BitConverter.ToString方法用于将一个字节数组转换为其十六进制表示形式的字符串。这对于调试、日志记录或显示二进制数据的可读形式特别有用。

BitConverter.ToString方法接受一个字节数组作为参数,并返回一个由一系列连字符分隔的十六进制对组成的字符串。每个十六进制对代表字节数组中的一个字节。

以下是如何使用BitConverter.ToString方法的一个例子:

using System;  
  
class Program  
{  
    static void Main()  
    {  
        // 创建一个字节数组  
        byte[] bytes = { 0x0A, 0xF0, 0x12, 0x34, 0x56, 0x78 };  
          
        // 使用BitConverter.ToString将字节数组转换为十六进制字符串  
        string hexString = BitConverter.ToString(bytes);  
          
        // 输出结果  
        Console.WriteLine(hexString);  
        // 输出将是: 0A-F0-12-34-56-78  
    }  
}

在上面的例子中,我们创建了一个包含6个字节的数组,并使用BitConverter.ToString方法将其转换为一个十六进制字符串。输出结果是一个由连字符 - 分隔的十六进制数字序列。

需要注意的是,BitConverter.ToString返回的字符串中每个字节都被表示为一个两位的十六进制数,即使该字节的高四位都是零也会这样表示。同时,字符串中的每个字节对之间都由连字符 - 分隔。

这个方法在调试期间特别有用,因为它提供了一种快速查看字节数组内容的方式,而无需手动将每个字节转换为十六进制。


24.08.07 最近在搞帧协议 故重温了BitConverter

C#中,BitConverter 类是一个静态类,它提供了用于在字节数组和基本数据类型(如 intfloatdouble 等)之间进行转换的方法。这个类位于 System 命名空间下,不需要实例化即可使用其静态方法。

以下是 BitConverter 提供的一些常用方法:

//转换方法
GetBytes(Boolean)//将布尔值转换为字节数组。
GetBytes(Char)//将 Unicode 字符转换为字节数组。
GetBytes(Int16)//将 16 位整数转换为字节数组。
GetBytes(Int32)//将 32 位整数转换为字节数组。
GetBytes(Int64)//将 64 位整数转换为字节数组。
GetBytes(UInt16)//将 16 位无符号整数转换为字节数组。
GetBytes(UInt32)//将 32 位无符号整数转换为字节数组。
GetBytes(UInt64)//将 64 位无符号整数转换为字节数组。
GetBytes(Single)//将单精度浮点数转换为字节数组。
GetBytes(Double)//将双精度浮点数转换为字节数组。
//解析方法
ToInt16(Byte[], Int32)//从字节数组的指定位置开始将 2 个字节转换为 16 位整数。
ToInt32(Byte[], Int32)//从字节数组的指定位置开始将 4 个字节转换为 32 位整数。
ToInt64(Byte[], Int32)//从字节数组的指定位置开始将 8 个字节转换为 64 位整数。
ToUInt16(Byte[], Int32)//从字节数组的指定位置开始将 2 个字节转换为 16 位无符号整数。
ToUInt32(Byte[], Int32)//从字节数组的指定位置开始将 4 个字节转换为 32 位无符号整数。
ToUInt64(Byte[], Int32)//从字节数组的指定位置开始将 8 个字节转换为 64 位无符号整数。
ToSingle(Byte[], Int32)//从字节数组的指定位置开始将 4 个字节转换为单精度浮点数。
ToDouble(Byte[], Int32)//从字节数组的指定位置开始将 8 个字节转换为双精度浮点数。
//其他方法
IsLittleEndian//获取一个值,该值指示当前计算机架构是否为小端字节序。
 搭配 list.AddRange 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值