c++ - 修改数据流的最有效方法

标签 c++ binary-data

我有一个 16 位值的流,我需要调整每个样本的 4 个最低有效位。每条短裤的新值都不同,但重复每 X 条短裤 - 本质上是用 ID 标记每条短裤。

有没有比 for 循环更快的小技巧?

更多详情 我正在将文件从一种格式转换为另一种格式。目前使用 FILE* 实现,但如果有帮助,我可以使用特定于 Windows 的 API。

[while data remaining]
{
   read X shorts from input
   tag 4 LSB's
   write modified data to output
}

除了批量操作之外,我想我正在寻找关于踩踏最后 4 位的最佳方法的意见。

  1. 右移 4,左移 4,|在新值(value)观中
  2. & 在我的零位中,然后 |在 1 位中
  3. 取模16,增加新值

我们现在只支持 win7(32 位或 64 位),因此硬件将是人们为此选择的任何东西。

最佳答案

如果您正在研究例如一个 32 位平台,你一次可以做 2 个。或者在现代 x86 等价物上,您可以使用 SIMD 指令一次对 128 位进行操作。

除此之外,没有任何微不足道的方法可以避免遍历整个数据集,因为这听起来像是您必须修改每个元素!

关于c++ - 修改数据流的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010500/

相关文章:

c++ - 来自并发 HashMap 的迭代器是否安全?

c++ - 在 Visual C++ 2010 Windows 窗体项目中使用 HTML Tidy

c++ - 简洁地重写一组参数数量可变的函数

c - 为什么 "double"表示为整数?

c++ - "Proper"用 C++/STL 存储二进制数据的方式

c++ - 之间的区别和|| , 或 & 和 &&

c++ - 如何在 CDateTimeCtrl 中居中对齐文本?

将十六进制数组 (char*) 转换为整数

python - 如何在 Python 中编写位长度不是 8 的倍数的二进制文件?

haskell - 通过网络进行高效的二进制 I/O