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

时间:2015-12-17 14:07:27

标签: c++ bit-manipulation

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

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

我可以抓取str中的每个字符并将其复制到位目的地但是我想知道是否有更优雅的东西将更长的字符串转换为内存中的7位?而且我没有找到任何内置功能......谢谢!

2 个答案:

答案 0 :(得分:1)

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

(除非我完全错误地理解你真正想要的东西)

答案 1 :(得分:1)

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