问题标签 [low-level-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
80 浏览

file-io - 使用 Huffman 编码,文件压缩到底是如何在低级别工作的?(在 C 中)

TL;DR:使用霍夫曼代码压缩纯文本实际上是如何工作的?

我目前正在学习霍夫曼编码算法及其在文本文件压缩中的应用。我知道我们可以通过使用由文本文件中每个字符的频率分布确定的编码技术(例如霍夫曼编码)来以更小的大小存储相同的数据。

在霍夫曼编码中,我们希望文本文件中最常见的字符获得最短的二进制表示(可变长度编码),因此文件所需的总存储量少于固定长度编码(如 ASCII)的存储量。

但是我仍然不知道如何实际实现压缩。我应该使用哪种文件来存储文本文件的 Huffman 编码二进制表示?将纯文本(可能是 .txt 格式)压缩成压缩文件的过程实际上是如何工作的?解压缩是否也与压缩相同,只是方向相反?

我尝试在 C 中使用二进制文件来存储 .txt 文件的二进制表示。正如您所料,二进制文件实际上变得比原始文件大。

我读过将纯文本文件转换为压缩文件只是用适当的位字符串替换每个字母,然后处理需要写入一些额外位的可能性。但是,对于什么是位字符串以及如何使用它,我仍然没有找到任何好的参考。

任何参考都会有所帮助,任何 C 实现的答案都是完美的。谢谢你。

0 投票
1 回答
145 浏览

arrays - 在MATLAB中计算数组的平均值

我在 Matlab“数字”中有一个数组,它作为 400x1 双精度存储在工作区中。我知道如何计算这些数据的平均值,但我遇到的问题实际上是编写代码来做到这一点。我知道有可以使用的内置函数,但我想尝试只使用低级 IO 命令来计算它,但我不知道如何去做。我在想正确的方法是创建一个 for 循环和一个包含总计的变量,该变量将数组中的每个元素相加,直到它到达数组的末尾。有了这个,我可以简单地将变量“总”除以元素数“400”来得到平均值。我遇到的主要问题是不知道如何获得一个 for 循环来搜索我的数组的每个元素,非常感谢任何有助于找出该部分的帮助。谢谢你。

0 投票
2 回答
432 浏览

arm - 如何使用一次只能读取 32 位的方法准确读取 64 位寄存器值?

在过去的一次采访中遇到了这个问题,但没有得到任何反馈。

由于它是一个寄存器,我是否需要在访问寄存器之前禁用中断以防止数据损坏?考虑使用两个缓冲区,32 位和 64 位,并将 32 位缓冲区发送到 read32() 并相应地将其转移到 64 位缓冲区。让我们假设这是小端架构。

我在 repl.it 上写了一个快速示例代码(输出与寄存器值不匹配

输出:

0 投票
0 回答
35 浏览

node.js - 逐行读取一个巨大的日志文件并在节点中随机访问?

我正在开发一个日志文件阅读器,它将解析文件并显示节点/电子应用程序中格式良好的表格中的行中的字段。

如果文件很小,我可以逐行读取它们,解析它们,将从每一行提取的字段存储在数据结构中,并允许客户端在整个文件中来回滚动。

由于这些文件可能有几 GB 长,我需要做一些更复杂的事情。

我目前的想法是:

  1. 通过 readline 包读取整个文件。
  2. 跟踪行结束偏移
  3. 读取文件后,解析底部(因此是最近的)大约 50 行,以便我可以提取相关数据并直观地显示
  4. 如果客户想要滚动超过我的 50 行,请使用偏移量转到前一行(通过 fs.read(..))。

另一种方法:

  1. 使用 fs.read() 直接走到最后
  2. 向后工作,直到找到换行符
  3. 如果客户想要滚动文件,请根据需要计算行偏移量

这甚至没有考虑建筑tail -f风格的功能。

我必须至少考虑编码,ascii以及utf8windows vs linux 风格的行尾。

这是很多低层次的工作。

是否有已经提供功能的库?

如果我自己这样做,我在这里没有提到的任何主要警告?我已经 20 年没有做过低级、随机访问、编程了。

0 投票
0 回答
307 浏览

c - 为什么 SystemTable->ConIn 函数会导致我的粉丝发疯并冻结启动过程?

所以基本上,我正在尝试使用 gnu-efi 进行输入,我一直在努力,但我终于得到了一些编译。这里是:

我的问题是,这会导致过程卡在开始,让我的粉丝发疯。没有错误或任何东西。它只是行不通。它停止了这个过程,它让我的粉丝们超速驾驶。任何 ConIn 函数都可以做到这一点。

** 额外信息:**

我编译我的代码的make文件:

我运行 qemu 的命令是: