
未来是拼出来的为您分享以下优质知识
在C中存储二进制数主要有以下两种方式,具体选择取决于应用场景和需求:
一、直接存储基本数据类型(推荐)
C支持直接将`byte`、`int32`等基础数据类型以二进制形式存储,操作简单且效率较高。例如:
```csharp
byte b = 0b01111110; // 二进制字面量
string bstr = "0111110"; // 二进制字符串
byte parsedB = Convert.ToByte(bstr, 2); // 转换为byte类型
```
适用于存储单个数值或少量数据。
二、序列化存储自定义对象(灵活但复杂)
当需要存储复杂对象时,可通过序列化将对象转换为二进制数据。主要方法包括:
```csharp
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("data.tifs", FileMode.Create)) {
formatter.Serialize(fs, obj);
}
```
*注意:`BinaryFormatter`已被弃用,不建议在新项目中使用。*
使用`BinaryWriter`手动写入
```csharp
byte[] buffer = ChangeObjectToByte(obj);
using (FileStream fs = new FileStream("data.tifs", FileMode.Create)) {
BinaryWriter writer = new BinaryWriter(fs, Encoding.Unicode);
writer.Write(buffer);
}
```
需自行实现`ChangeObjectToByte`方法,将对象转换为字节数组,代码复杂度较高。
使用`System.Runtime.Serialization`命名空间(推荐)
通过`[Serializable]`属性标记类,并使用`BinaryFormatter`(需谨慎)或`MessagePack`等现代序列化库,安全性更高且兼容性更好。
总结建议
基础数据:
优先使用直接赋值或二进制字面量,简单高效。
自定义对象:避免使用`BinaryFormatter`,可考虑`MessagePack`或手动序列化,但需权衡代码复杂度与安全性。