我的部分应用程序数据包含一组 9 个三进制(base-3)“位”。为了保持数据库的数据紧凑,我想将该数据存储为一个短的。由于 3^9 < 2^15 我可以将任何可能的 9 位 base-3 数字表示为短数字。
我目前的方法是将它作为长度为 9 的字符串来使用。我可以通过索引读取或设置任何数字,这既好又简单。不过,要将其转换为short,我目前正在手动转换为base 10(使用shift-add循环),然后使用 Int16.Parse 将其转换回二进制short。要将存储的值转换回基数为 3 的字符串,我反向运行该过程。所有这些都需要时间,如果可能的话,我想对其进行优化。
我想要做的是始终将值存储为一个短的,并读取并设置到位的三进制位。理想情况下,我将具有从二进制文件中获取和设置单个数字的功能。
我尝试过使用一些位移和 mod 功能,但还没有想出正确的方法来做到这一点。我什至不确定是否有可能不进行完全转换。
任何人都可以给我任何可以帮助解决这个问题的按位算术魔法吗?