当硬件不支持 64 位数字时,是否可以将 64 位数字表示为字符串?

It is possible to represent a 64-bit number as string when hardware doesn't support 64-bit number?

提问人:kelvinandrade 提问时间:12/11/2018 最后编辑:kelvinandrade 更新时间:12/12/2018 访问量:333

问:

我想将一个 64 位数字显示为字符串。问题是我的硬件不支持 64 位数字,只支持 32 位。

因此,我将 64 位数字分成两个 32 位数字(高音和低音部分)。

Example: 64-bit number  :  12345678987654321 (002B DC54 6291 F4B1h)
         32-bit low part:  1653732529                  (6291 F4B1h)
         32-bit high part: 2874452                     (002B DC54h)

我认为解决我问题的方法是将这个数字显示为字符串。 有可能吗?

谢谢。

字符串 数学 与语言无关 微控制器

评论

4赞 Patrick Artner 12/11/2018
python还是c?你用哪种语言?您的问题与微控制器有什么关系?有很多 MC - 哪一个?请阅读标签描述并删除不适当的标签 - 谢谢
0赞 kelvinandrade 12/11/2018
语言对我来说并不重要,我两者都作为参考。我正在使用嵌入式系统。这就是我提出“微控制器”的原因。我认为,如果我的问题有解决方案,语言或系统就无关紧要了。谢谢。
0赞 12/11/2018
是的你可以。如果您只想存储一个数字并显示它,则可以将该数字直接存储为字符串,而不是两个 32 位数字。类似的东西string my_number = "123456789123456789"; cout << my_number;
0赞 user694733 12/11/2018
你试过做 64 位除法吗?一些 C 编译器可以在软件中模拟 64 位除法。
0赞 12/11/2018
OP 只是在谈论存储和显示数字,而不是对它们进行任何数学运算。

答:

1赞 Spektre 12/11/2018 #1

是的,您可以使用 32 位甚至更低位宽的数组......uint

对于打印,您可以使用以下命令:

因此,首先打印一个在任何位宽上都很容易的十六进制字符串(因为您只需将较低的位宽从 MSW 打印到 LSW 堆叠在一起),然后将十六进制文本转换为 dec 文本......

使用这个链式单位数组,您可以执行如下数学运算:

对 s 数组进行运算比对字符串进行运算要快得多......uint

但是,如果您坚持“是”,您也可以使用字符串表示形式......

也有像 BCD 这样的混合表示适合这种情况,但您的 MCU 需要支持它......

评论

0赞 kelvinandrade 12/11/2018
感谢您@Spektre回答。所以,基本上我应该把我的两个 32 位数字,转换为十六进制,然后转换为字符串。将这两个字符串连接起来并转换为十进制?
0赞 Spektre 12/12/2018
@KelvinCésardeAndrade是的,只有这样,你可以直接从两个 uints 中投射十六进制字符串......
1赞 David Raluy 12/11/2018 #2

根据您选择的语言,该语言可能允许您使用大于 32 位的整数,即使在 32 位架构(如 python)上也是如此。 如果是这样的话,问题就变得微不足道了:计算值,然后计算相应的十六进制字符串。