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