将std::string复制到7位ASCII内存中

copy std::string to 7-bit ASCII memory

本文关键字:ASCII 内存 7位 复制 std string      更新时间:2023-10-16

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

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

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

由于只有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;
}

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

您可能指的是MIME编码,其中7bit表示数据实际上没有编码,最初是US ASCII。如果不是,您可以用base64对其进行编码并指定该编码。