如何将二进制字符串写入文件 C#

2023-12-20

我有一个二进制数字符串,例如 temp =“0101110011”,我想将其另存为文件,该 Temp 有 10 个字符,如何将此字符串保存到 10 位长度的文件中?

void Save_Data(string temp)
{
    bool[] BoolArray = new bool[temp.Length];
    BitArray Barray = new BitArray(BoolArray.Length);
    char[] ch = temp.ToCharArray();

    for (int i = 0; i < temp.Length; i++)
    {
        if (ch[i] == '0')
        {
            Barray[i] = false;
        }
        else
        {
            Barray[i] = true;
        }
    }

    Stream stream = new FileStream("D:\\test.dat", FileMode.Create);
    StreamWriter sw = new StreamWriter(stream);

    foreach (bool bit in Barray)
    {
        sw.Write(bit ? 1 : 0);
    }

    sw.Flush();
    sw.Close();
}

使用此代码我的文件长度是 80 位


您的文件大小将为 2 字节(16 位)。您不能拥有大小为 10 位的文件(仅 8、16、24、32、40 ...)。在磁盘中,分配给文件的大小可以与簇大小一样小。如果磁盘上的簇大小为4096字节并且文件大小小于簇大小,则文件系统将分配簇大小的内存。

大小以字节为单位,所以如果你有字符串"00101"(5 位)字节表示形式为00000101(8 位)。

在你的情况下你的字符串是"0101110011"(12 位)- 它是两个字节:

  1. "01"在字符串中将是00000001以字节表示

  2. "01110011"在字符串中将是01110011以字节为单位 表示

第二个字符串的长度为 8,因此字节将类似于该字符串。

你的字符串从'0'但你可以省略'0'它们一开始是没有用的。这意味着比字节表示值01110011 and 1110011是相同的。

Hepler:

byte[] StringToBytesArray(string str)
{
    var bitsToPad = 8 - str.Length % 8;

    if (bitsToPad != 8)
    {
        var neededLength = bitsToPad + str.Length;
        str = str.PadLeft(neededLength, '0');
    }

    int size= str.Length / 8;
    byte[] arr = new byte[size];

    for (int a = 0; a < size; a++)
    {
        arr[a] = Convert.ToByte(str.Substring(a * 8, 8), 2);
    }

    return arr;
}

另外,你应该使用BinaryWriter代替StreamWriter:

string str = "0101110011";
byte[] arr = StringToBytesArray(str);

Stream stream = new FileStream("D:\\test.dat", FileMode.Create);
BinaryWriter bw = new BinaryWriter(stream);

foreach (var b in arr)
{
    bw.Write(b);
}

bw.Flush();
bw.Close();

此外,此示例适用于不同的字符串长度。

从文件中读取值后,您将获得 2 个字节,然后将其转换为string。但这些字节的字符串将是"0000000101110011"(有不必要的'0'在开始时)。

获取从以下位置开始的字符串'1':

string withoutZeroes = 
       withZeroes.Substring(withZeroes.IndexOf('1'), str.Length - withZeroes.IndexOf('1'));

所有操作之后(带字符串"0101110011")您的文件大小为 2 字节(16 位),但文件系统为其分配更多内存(分配的内存大小将等于簇大小)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将二进制字符串写入文件 C# 的相关文章

随机推荐

  • 如何在 Apache POI 中设置固定列宽

    如何在 Apache POI 中设置固定列宽 我想将我的第一列设置为固定宽度 我尝试过使用sheet setColumnWidth 0 1000 cellStyle setWrapText true 设置它不反映的自动换行 public X
  • 使用内置本地数据库或隔离存储

    本地数据库现已内置于 Windows Phone 7 5 Mango 中 我正在考虑存储一些不相关的数据集合的场景 使用本地数据库非常简单 而使用独立存储则需要更多的自定义开发 还有一些替代解决方案 例如 FileDb 在芒果前的讨论中提到
  • Django-DB-Migrations:无法更改表,因为它有待处理的触发事件

    我想从 TextField 中删除 null True footer models TextField null True blank True footer models TextField blank True default 我创建了
  • WPF 重复元素

    我有一个 UserControl 它是一个按钮 具有某些特征 并且我有一个窗口 其中有几个 正常 样式的按钮 在同一个窗口上 我定义了一种样式来覆盖一些正常特征 并且我想要其中的一些 有点像键盘布局 我拥有的是一个包含 30 行的 Unif
  • Django 查询非常慢

    我的 Django 应用程序有问题 模型查询Scope速度非常慢 经过一些调试后我仍然不知道问题出在哪里 当我像这样查询数据库时scope Scope objects get pk Esoterik I 需要 5 到 10 秒 数据库只有不
  • openstack 网络无法从虚拟机 ping/ssh 到虚拟机

    我已经使用 devstack 脚本安装了多节点 openstak 可以运行虚拟机 但存在网络问题 无法从一个虚拟机 ssh ping 到另一虚拟机 我只能从运行该虚拟机的主机 control1 computeX 通过 ssh 连接到虚拟机
  • 动态修改 Tapestry 5 中的 FormInjector 上下文信息

    我当前的问题是关于动态更新上下文信息FormInjector 我之前的问题在 Tapestry 5 中更新表单内的区域 https stackoverflow com questions 2966750 updating a zone in
  • 使用 jFreeChart 在多个图形中绘制多个图形

    我正在尝试使用 jFreechart 生成两个数字 每个数字有 12 个图表 在 jFreeChart 中称为系列 然而 有些图表被简单地跳过了 我知道我在这里遇到同步问题 并尝试使用用户 trashgod 提供给我的方法here http
  • Python json.dumps() 输出缩小的json?

    有没有办法让python的json dumps
  • 如何在 Azure AD B2C 中停用和重新激活用户

    有什么方法可以停用并重新激活 Azure AD B2C 用户 我想实现切换 Azure AD 用户状态的功能 如果 停用并重新激活 是指阻止用户登录 目前 这仅适用于本地帐户 不适用于来自社交提供商的帐户 Facebook Google 等
  • 如何设置SWFUpload上传的文件夹?

    我在文档中没有看到如何使用 SWFUpload 设置上传的文件文件夹 有人能指出我正确的方向吗 如果有帮助的话我正在使用 PHP 5 您所做的就是调用 PHP 脚本 该脚本会处理文件上传 您可以打开调试 这将为您提供一个非常好的调试视图 了
  • gridview 中的分页

    我的网格视图
  • 动态缩略图/调整图像大小生成[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 动态调整图像大小与存储调整大小的图像 https stackoverflow com questions 2823600 php image resize on the fly vs stor
  • 未找到 glib.h 和 gtk.h

    大家好 我有一个程序 其中包括 gtk gtk h glib h 我使用过以下命令 sudo apt get install libgtk2 0 dev glib sudo apt get install glade 但我仍然收到 glib
  • 本机 xml 数据库中的唯一性插入

    我正在开发一个基于XML 的项目 我使用 Sedna 数据库来存储我的集合 其中包含 XML 文件及其 XSD 架构文件 我在这些方案中定义了主键 唯一键 但到目前为止我可以将重复值 通过 XQuery 更新插入命令 插入到主键字段中 为了
  • 内存泄漏和处置

    我可能不理解这个概念或者我做错了什么 我对 NET 中的内存管理有一些疑问 想象一下情况 Form1是大人窗体 作为 MDI 父级和一点FormChild 被绑定为子项 public partial class Form1 Form pub
  • 如何使用 @output 将布尔值从子级发送到父级

    嗨 有角的社区 我想使用 Output 触发一个事件来隐藏或打开 关闭包含其他组件的 div 这很简单 但我以前从未使用过 EventEmitter 所以我希望当调用 hideDem 时 它会根据来自 child ts 的其他属性隐藏或打开
  • 如何增加android中线性布局中元素之间的空间? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我使用了 Linearlayout 其中有 3 个 EditText 元素 现在我想增加 Edittext 元素之间的空间 填充 是否可以 基本上这是相对于你的边框而言的 如果你想在边框内的元素
  • 使用该 exe 的 VM 参数在 Maven 中创建一个 exe 文件

    我目前正在开发一个 Java 项目 该项目需要指定 java library path 的 VM 参数 当从 Eclipse 中运行我的程序时 没问题 我可以轻松指定我的 VM 参数 现在我想通过 Maven 构建我的项目 但还没有找到向该
  • 如何将二进制字符串写入文件 C#

    我有一个二进制数字符串 例如 temp 0101110011 我想将其另存为文件 该 Temp 有 10 个字符 如何将此字符串保存到 10 位长度的文件中 void Save Data string temp bool BoolArray