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

目录
相关文章
|
2月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
679 19
|
缓存 编解码 网络协议
一文带你由浅入深Netty异步非阻塞世界
一文带你由浅入深Netty异步非阻塞世界
一文带你由浅入深Netty异步非阻塞世界
|
物联网 开发工具
物联网平台实用技巧:设备端检测自己是否在线
基于MQTT接入的设备靠心跳保活,但心跳是周期性的、且自动收发和超时重连,这些特性给主动检测设备端是否在线带来了一定难度。本文提供通过消息收发是否正常判定设备是否在线的原理、流程、实现方式。
4940 1
|
机器学习/深度学习 PyTorch TensorFlow
|
2月前
|
安全 5G 网络安全
SD-WAN技术概述:软件定义广域网的工作原理
总结起来,Sd-wan作为一项创新技术,在现代快速变换且日益复村多样环境下提供了一个灵活高效且具有经济效益解决方案。随着数字转型趋势持续推进,Sd-wan无疑会在未来扮演更重要角色,在助力企业建立更智慧强骨干同时也促进整体行业向前发展步伐。
240 17
|
2月前
|
存储 安全 固态存储
基于C#实现的支持文件传输的Socket聊天室
基于C#实现的支持文件传输的Socket聊天室
229 5
|
10月前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
1946 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
469 7
|
机器学习/深度学习 人工智能 数据可视化
何恺明CV课程 | AI大咖说
麻省理工学院(MIT)电气工程与计算机科学系(EECS)副教授何恺明开设了两门精彩课程:“Advance in Computer Vision”和“Deep Generative Models”。何恺明是计算机视觉和深度学习领域的杰出科学家,曾提出深度残差网络(ResNet)等重要成果。这两门课程不仅涵盖了最新的研究前沿,还由何恺明亲自授课,内容涉及卷积神经网络、生成对抗网络、变分自编码器等,是学习计算机视觉和生成模型的宝贵资源。
534 8
|
消息中间件 存储 NoSQL
阿里开源中间件一览
阿里开源中间件一览
1379 2