.NET编程技巧:C#中字节与其他数据类型转换方法

56 阅读2分钟

在C#中,字节(byte)与其他数据类型的转换是常见的编程需求,因为它涉及到内存操作、文件处理、网络通信等多个领域。以下是一些常用的字节与其他数据类型转换方法。

字节与整型之间的转换

整型(如 int)可以通过位操作或者使用 BitConverter类来转换为字节数组。

使用位操作

int number = 123456789;
byte[] bytes = new byte[4];
bytes[0] = (byte)(number >> 24);
bytes[1] = (byte)(number >> 16);
bytes[2] = (byte)(number >> 8);
bytes[3] = (byte)number;

反向从字节数组到整型:

int numberFromBytes =
    (bytes[0] << 24) |
    (bytes[1] << 16) |
    (bytes[2] << 8) |
     bytes[3];

使用 BitConverter

int numberToConvert = -123456789;
// 转化为字节数组
var bytesFromInt=BitConverter.GetBytes(numberToConvert);

// 字节数组还原为Int32类型
var intFromBytes=BitConverter.ToInt32(bytesFromInt,0);

字节与浮点数之间的转换

浮点数(如 floatdouble)也可以使用 BitConverter.

转化float:

float floatNumber=123.456f;

// float to byte array:
var byteArray= BitConverter.GetBytes(floatNumber);

// byte array to float:
var fromByteArray= BitConverter.ToSingle(byteArray,0);
​

转化double:

double doubleNumber=-9876.54321;

// double to byte array:
var byteArray= BitConverter.GetBytes(doubleNumber);

// byte array to double:
var fromByteArray=BitConverter.ToDouble(byteArray,0); 

字符串和字符数组和字节数组之间的转换

字符串通常通过编码类进行到字节数组或从字符数组进行相互变更。

String 到 Byte Array:

使用UTF-8编码作例子:

string str="Hello World!";
Byte[] byteArray=UTF8Encoding.UTF8.GetBytes(str);  

反向过程:

string strBack=UTF8Encoding.UTF8.GetString(byteArray);   

对于不同编码方式,只需更改上述代码中UTF-encoding部分即可。例如对于ASCII 编码,则替代相应部分即可:

Byte[] byteArray=ASCIIEncoding.ASCII.GetBytes(str);  

结构体和对象序列化成Byte Array

结构体或者对象序列化成一个连续内存块需要用到系统提供序列化功能。这里以二进制格式器作例子:

BinaryFormatter formatter=new BinaryFormatter();
using(MemoryStream stream=new MemoryStream())
{
  formatter.Serialize(stream,yourObjectOrStructInstance );
  return stream.ToArray();
}   
​

反序列话则是将上述过程逆向执行。

总结

在C#中将不同数据类型互相变更至二进制格式需要注意每种数据类型特定方法以及可能涉及特定系统资源比如内存流等。正确理解每种方法并选择最适合当前场景下最高效率且安全性高且易于维护代码方式至关重要。