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

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

在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);
​

字节与浮点数之间的转换

浮点数(如 float, double)也可以使用 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#中将不同数据类型互相变更至二进制格式需要注意每种数据类型特定方法以及可能涉及特定系统资源比如内存流等。正确理解每种方法并选择最适合当前场景下最高效率且安全性高且易于维护代码方式至关重要。

目录
相关文章
VSPD虚拟串口软件安装及使用
VSPD虚拟串口软件安装及使用
5848 0
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
549 0
|
7月前
|
网络协议 网络安全 API
C# 与三菱FX5U PLC通讯交互指南
C# 与三菱FX5U PLC通讯交互指南
2639 121
|
4月前
|
Java 大数据 Apache
Excel工具-HUTOOL-输出Excel
Hutool基于Apache POI封装了Excel读写功能,提供ExcelWriter和BigExcelWriter类,支持写出List、Map、Bean等数据类型到Excel,可自定义样式、多sheet操作,并解决大数据量导出时的内存溢出问题,适用于文件导出、客户端下载等场景。
|
5月前
|
运维 C++ 开发者
Visual Studio Code (VS Code) 超详细下载安装 + 中文设置教程:附安装包
Visual Studio Code是微软推出的免费开源代码编辑器,轻量流畅、插件丰富、跨平台支持,广受全球开发者喜爱,适用于编程入门、全栈开发、数据科学等场景,用户已超1亿。
1750 1
|
4月前
|
Java 大数据 Maven
Excel工具-HUTOOL-输出Excel
Hutool封装Excel写出功能,提供ExcelWriter和BigExcelWriter,支持写入List、Map、Bean等数据类型,可自定义样式、标题别名、多Sheet导出,并解决大数据量内存溢出问题,操作简便且高效。
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
2629 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
编解码 C# 图形学
C# 获取当前屏幕DPI
原文:C# 获取当前屏幕DPI 1.通过Graphics类获取 Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Handle); double dpixRatio = currentGraphics.DpiX/96; 比如当前屏幕设置DPI设置1.5倍,可以通过如上通过后台获取。
3370 0
|
存储 自然语言处理 Python
汉字转Unicode
汉字转Unicode
|
安全 Java 网络安全
Java Socket编程技术详解:从基础到进阶的全方位指南
【6月更文挑战第21天】Java Socket编程是网络通信的关键,涉及`Socket`和`ServerSocket`类。基础教程展示了如何创建简单的客户端-服务端交互,而进阶内容涵盖了非阻塞I/O、多路复用(如使用`Selector`)以提升性能,以及通过SSL/TLS确保安全通信。学习Socket编程不仅是技术实践,也是理解网络原理的过程,强调了持续学习和实践的重要性。
649 1

热门文章

最新文章

下一篇
开通oss服务