我要将std::string
复制到ASCII ...但内存中只有 7位 ASCII。所以这个8字符的字符串应该适合这个7字节/ 56位数组。
std::string str = "12345678";
unsigned char ascii_destination[7];
我可以抓取str
中的每个字符并将其复制到位目的地但是我想知道是否有更优雅的东西将更长的字符串转换为内存中的7位?而且我没有找到任何内置功能......谢谢!
答案 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中对其进行编码并指定该编码。