c++ - 将 std::string 复制到 7 位 ASCII 内存

标签 c++ bit-manipulation

我必须将 std::string 复制到 ASCII ... 但内存中只有 7bit ASCII。所以这个 8 字符的字符串应该适合这个 7 字节/56 位数组。

std::string str = "12345678";
unsigned char ascii_destination[7];

我可以抓取 str 中的每个字符并通过位操作将其复制到它的目的地,但我想知道是否有更优雅的方法可以将更长的字符串转换为内存中的 7 位?而且我还没有找到任何内置函数...谢谢!

最佳答案

因为你只有 56 位,所以你可以使用 64 位整数作为中间存储:

uin64_t temp = 0;

// Add 7 bits to temp, 8 times
for (int i = 0; i < 8; ++i)
    temp = (temp << 7) | str[i];

// Remove 8 bits from temp, 7 times
for (int i = 0; i < 7; ++i)
{
    ascii_destination[i] = (uint8_t)(temp & 0xff);
    temp >>= 8;
}

(除非我完全理解错了你真正想要的)

关于c++ - 将 std::string 复制到 7 位 ASCII 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336581/

相关文章:

c++ - 我无法在 Code::blocks IDE 上运行此代码,但可以在网上正常运行...!! 谁能告诉我应该进行哪些修改才能使其在 IDE 上运行?

c++ - 在 C++ 应用程序的使用中需要对数组、 vector 和映射进行说明

c - SIM800 中通过位联动的一根线协议(protocol)

PHP Left Shift 在两台不同的机器上给出两个答案

c++ - 了解 rand() 操作

c++ - 比较 C 和 C++ 中的结构

c++ - 具有双向接口(interface)的基于 DLL 的应用程序框架 (Windows)

comparison - 用于快速确定两个位序列之间相似性的包

c++ - 从 C++ 中小于给定值 d 的十六进制的所有数字中减去 1

c++ - 按位与的奇怪行为