gpt4 book ai didi

c++ - 如何高效地将8个17位整数转换为17个8位整数

转载 作者:太空狗 更新时间:2023-10-29 19:38:51 24 4
gpt4 key购买 nike

好的,我有以下问题:我有一组 8 个(无符号)数字,它们都是 17 位的(也就是它们都不大于 131071)。由于 17 位数字很烦人(将它们保存在 32 位 int 中是浪费空间),我想将它们变成 17 个 8 位数字,如下所示:

如果我有这 8 个 17 位整数:

[25409, 23885, 24721, 23159, 25409, 23885, 24721, 23159]

我会将它们变成以 2 为基数的表示法 L

["00110001101000001", "00101110101001101", "00110000010010001", "00101101001110111", "00110001101000001", "00101110101001101", "00110000010010001", "00101101001110111"]

然后将其连接成一个大字符串:

"0011000110100000100101110101001101001100000100100010010110100111011100110001101000001001011101010011010011000001001000100101101001110111"

然后将其分成 17 个字符串,每个字符串有 8 个字符:

["00110001", "10100000", "10010111", "01010011", "01001100", "00010010", "00100101", "10100111", "01110011", "00011010", "00001001", "01110101", "00110100", "11000001", "00100010", "01011010", "01110111"]

最后,将二进制表示转换回整数

[49, 160, 151, 83, 76, 18, 37, 167, 115, 26, 9, 117, 52, 193, 34, 90, 119]

此方法有效,但效率不高,我正在寻找比这更有效的方法,最好用 C++ 编码,因为这是我正在使用的语言。我只是想不出有什么方法可以更有效地做到这一点,而且 17 位数字并不是很容易使用(16 位数字会更好用)。

提前致谢,xfbs

最佳答案

按原样存储每个数字的最低 16 位(即两个字节)。这留下了每个数字的最高有效位。由于有八个这样的数字,只需将八位组合成一个额外的字节即可。

这将需要与您的方法完全相同的内存量,但涉及的操作要少得多。

附言无论存储方法如何,您都应该使用位操作运算符( <<>>&| 等等)来完成这项工作;不应涉及任何基于字符串的中间表示。

关于c++ - 如何高效地将8个17位整数转换为17个8位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com