我想生成一个 16 位无符号整数(uint16_t),它可以表示以下内容:
- 前 2 位数字代表一些版本,如 1、2、3 等。
- 接下来代表另一个数字的 3 位数字可能是 123、345、071 等。
- 最后 11 位数字代表数字 T234、T566 等。
我们如何使用目标 C 来做到这一点。我想稍后解析这些数据以取回这些组件。请指教。
我想生成一个 16 位无符号整数(uint16_t),它可以表示以下内容:
我们如何使用目标 C 来做到这一点。我想稍后解析这些数据以取回这些组件。请指教。
我认为您误解了 uint16_t 的含义。这并不意味着 16 位十进制数(可以是 0 到 9,999,999,999,999,999 之间的任何数字)。表示可以用 16 位表示的无符号数。这种值的范围是十进制的 0 到 65535。如果您真的想存储您正在谈论的数字,则需要 52 位。你也会让事情变得非常困难,因为你不能轻易地从那个 52 位序列中提取前两位十进制数字;您必须将数字视为十进制值,然后将其模数 100,您不能只说它是 1 到 8 位。
有一个名为 Binary Coded Decimal 的方案可以帮助您。您将采用 64 位值 (uint64_t),并且您会说在此值中,第 1-7 位是版本(可能是高达 127 的值),第 8-17 位是第二个数字(可能是值高达 1023)和位 18-63 可能是您的第三个数字(这 46 位将能够存储高达 70,368,744,177,663 的数字。
所有这一切在技术上都是可行的,但你真的会让自己变得困难。看起来您正在存储版本、次要版本和内部版本号,大多数人使用字符串而不是小数