我需要在压缩方法中存储一个包含8个字符的字符串(它们都是数字),
据我了解,每个char
使用8 bits
1 byte
,因为我只使用数字,我可以使用4 bits
(2^4=16
组合)对于每个unsigned char
我可以存储两个数字而不是一个数字。因此,我需要4 bytes
来存储8位数而不是8 bytes
。
直到这里我是对还是错?
现在我如何将这些数据存储在4 unsigned char
s的字符串中?我不是在寻找一个明确的答案,只是开始了解动机。
答案 0 :(得分:2)
有三种显而易见的方法可以在四个八位值中存储八位十进制数字。
一种方法是将每个十进制数字减少到4位,并以8位存储两个四位数值。
另一种方法是将每对十进制数字组合成一个0到99之间的数字,并将该数字存储为8位。
另一种方法是将所有八位十进制数字组合在一起,形成一个从0到99999999的数字,并将其存储为32位,将四个八位值视为一个32位整数。
要在这些之间做出决定,请考虑对值进行编码需要执行哪些操作(组合两个数字以进行编码值需要哪些算术运算或位操作)以及解码值所需执行的操作(给定八位,你怎么得到它们的数字?)。
要评估此问题,您应该了解基本的算术运算和位操作,例如逐位AND和OR,移位,使用“掩码”和AND操作等等。它也可能有助于知道除法和余数通常比现代计算机上的其他算术和位操作更耗时。
答案 1 :(得分:1)
我希望您在评论中使用 harold 建议的unsigned int
。在unsigned char[4]
中,您可能需要额外的一个字符来终止'\0'
个字符。
根据您自己的建议使用shift,以便从 uchar 正确转换为 uint 。