将 9 位值作为字节写入 C 中的文件

2023-12-07

我有一个整数值从 0-511(最多 9 位)的数组。我正在尝试将其写入文件fwrite.

例如,对于数组:

[257, 258, 259]
Which is 100000001, 100000010, 100000011

I am trying to write
100000001100000010100000011 + extra padding of 0s to the file 

但由于 fwrite 限制一次只能写入 1 个字节,所以我不知道如何执行此操作。我对按位运算很陌生,不知道如何分离各个字节。


你需要一点缓冲。

因为你当时写的是8位,所以你必须 具有至少可以容纳至少 9+7 位的数据类型。uint16_t会做, 但我建议使用的尺寸至少与您的本机一样大int。确保使用无符号类型以避免移位问题。

uint32_t bitBuffer = 0;  // Our temporary bit storage
uint32_t count = 0;      // Number of bits in buffer

假设我们有单个数据:

uint32_t data9b = 257;  // 1 0000 0001

向缓冲区添加位很简单;只需在缓冲区末尾移动位, 并与 OR 结合。

bitBuffer |= (data9b << count); // At first iteration, shift does nothing
count += 9;                     // Update counter

添加 9 位后,我们可以将 8 位刷新到文件中。

while(count >= 8) {
    writeToFile(bitBuffer & 0xFF);  // Mask out lowest bits with AND
    bitBuffer >>= 8;                // Remove written bits
    count -= 8;                     // Fix counter
}

每个周期后,缓冲区中都会留下 0 - 7 位。在所有数据的末尾,如果完成的不是 8 位的倍数,则只需写入剩余的内容bitBuffer归档。

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

将 9 位值作为字节写入 C 中的文件 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析

随机推荐

  • HTML“按钮”是否应该与其他所有内容具有相同的盒子模型?

    参考两者button元素和input元素与一个type of button 我遇到了一个我认为是错误的行为 在 Firefox 和 Chrome 的最新版本中 但考虑到表单元素通常是我认为的 w3 规则的例外 我想在假设我是对的之前我会要求
  • Jquery Spinner 箭头未加载(可见性)

    微调器上的向上和向下箭头没有显示 我不确定为什么 除了这些箭头之外 所有其他 UI 图像似乎都在加载 这是一个网站 网站链接 这些图像不显示的原因是因为在您指定的路径中找不到它们 您可能忘记上传它们 或者您将它们上传到了错误的目录
  • Boost.Spirit 解析可选前缀

    我正在尝试解析一串以空格分隔 可选标记的关键字 例如 descr expense type receivable customer 27 3 其中冒号之前的表达式是标签 并且它是可选的 即假定默认标签 我无法让解析器完成我想要的事情 我对一
  • 为什么对通用函数中特征的引用必须实现“Sized”?

    我有一个函数返回对特征的引用 trait ref 和另一个引用通用特征实现的函数 take trait ref generic 但是 无法将从第一个函数获得的引用传递给第二个函数 Rustc 抱怨说 这个特质std marker Sized
  • 奇怪的 SQL 浪费我的资源

    我在 11 2 0 3 数据库上遇到问题 一个奇怪的查询占整个数据库活动的 47 42 该应用程序是使用 Flex 开发的 前端是 Apache Tomcat 6 0 35 Java 版本为 1 6 0 27 我在几个网站上搜索过 发现其他
  • Powershell 网页抓取 SSL/TLS 问题

    我想在服务器上运行网页抓取脚本 当前脚本收集指定页面上的 html url http websms net httpWebRequest request net webRequest create url net httpWebRespon
  • UITableview ,动态部分和行

    想要动态创建一个 uitableview 其中一个部分有 2 行 我编写了这段代码 但我遇到了所有部分中仅重复前 2 行的问题 现在我有这行 0 1 gt 第 0 节 第 0 1 行 gt 第 1 节 第 0 1 行 gt 第 2 节 想要
  • Magento 购物车/magento 外部的会话数据

    这可能会有点令人困惑 因为我已经尝试了一切来使这项工作成功 我想要的只是我的品牌网站 domain com 中的一个链接 该链接显示我的 magento 1 5 1 购物车 domain com shop 中的数量我很容易提取产品数据和导航
  • Velocity 模板 - 正则表达式

    我刚刚开始在新工作中使用速度 但我真的不喜欢我已经发现的东西 在这一点上 我实际上更喜欢 freemarker X 不管怎样 我正在尝试做一个正则表达式 我看到了这点 搜索 正则表达式 但这并不完全是我正在做的实现 我没有任何对java的访
  • 我想在 ping 主机后获取 ping 执行时间和结果字符串

    我想在 ping 主机后获取 ping 执行时间和结果字符串 我该怎么做 long currentTime System currentTimeMillis boolean isPinged InetAddress getByName se
  • Defer 块未执行

    我在操场上执行以下快速代码 func A print Hello guard 1 2 else return defer print World A 我期待看到 Hello World 相反 只有Hello被打印 为什么是这样 我缺少什么
  • Matlab中两点之间的距离

    我有 2 个向量 一个的尺寸为 200 2 另一个的尺寸为 3 2 它们都是笛卡尔坐标系中的点 我想计算前 200 个点和其他 3 个点之间的距离并将它们存储在向量中 我正在使用这样的函数 for i 1 cur for j 1 200 L
  • 带有 SpriteKit 的 iOS 通用设备应用程序,如何缩放所有视图的节点?

    我想做一个景观 app to be 普遍的 以便精灵节点根据运行应用程序的任何视图大小按比例缩放 我想要一个完全程序化解决方案 因为我不喜欢IB 我的游戏非常简单 我不需要任何类型的滚动或缩放 因此整个游戏将始终存在并占据整个视图 我正在寻
  • java将数组刷新到jList中

    好的 我有一个 JList 内容是通过数组提供的 我知道如何向数组添加元素 但我想知道如何刷新 JList 或者甚至可能吗 我试过谷歌 import java applet Applet import java awt import jav
  • 如何满足迭代器特征界限才能在这里使用 Rayon?

    我正在尝试使用 Rayon 的并行化 Ramer Douglas Peucker 线简化算法par iter代替iter extern crate num traits use num traits Float ToPrimitive ex
  • 属性访问器[重复]

    这个问题在这里已经有答案了 之间有什么根本区别吗 public string Name get return name set name value and public string Name get set 您可以访问内部字段 在第二种
  • 使用循环创建菱形图案

    我正在尝试编写一个程序 该程序读取整数并使用星号显示给定边长的实心菱形 例如 如果边长是4 程序应该显示 这就是我正在尝试做的事情 它正在执行 但我似乎无法为程序提供正确的空间来正确显示菱形形状 userInput int input Pl
  • 如果 json 字段具有特殊字符(如点),则访问 json 字段值

    如果我有一个 json 文件 其中的字段具有特殊字符 在我的例子中是点 我如何访问空手道中的字段值 例如有一个名为 example json 的 json 文件 field1 field2 value2 field 3 value3 如果我
  • 根 ViewController 内的 UIViewController 不旋转

    我有一个 UIViewController 我想将其作为独立层添加到整个应用程序的顶部 所以我尝试在应用程序委托中使用 self window addSubview viewController view 将其添加到 UIWindow 中
  • 将 9 位值作为字节写入 C 中的文件

    我有一个整数值从 0 511 最多 9 位 的数组 我正在尝试将其写入文件fwrite 例如 对于数组 257 258 259 Which is 100000001 100000010 100000011 I am trying to wr