当前位置:  开发笔记 > 后端 > 正文

使用ruby将存储为signed的无符号整数转换回原始值

如何解决《使用ruby将存储为signed的无符号整数转换回原始值》经验,为你挑选了2个好方法。

一个C程序将它认为是64位无符号整数的东西放入Postgres数据库中的一个列,该数据库被输入为int8.对于Postgres,int8总是'signed int8'(没有像'unsigned int8'那样).因此,我所使用的Ruby程序显示从该空间的上半部分中的Postgres检索到的数字为负数.

在Ruby中,采用-ve整数并将其转换为C程序员所期望的64位无符号整数的正确方法是什么?



1> Artelius..:

我不确定Ruby的细节,但是如果数字为负数,则基本上需要添加2 ^ 64。假设数字存储为2的补数,几乎可以肯定是这样。

FYI是2的补码系统,从本质上讲,它将(例如)32位数字视为2到32的数字。这意味着-1与2 ^ 32-1或0xFFFFFFFF相同。事实证明,在硬件级别使用起来非常简单。



2> unwind..:

这可能有效:

x += 0x1_0000_0000_0000_0000 if x < 0

巨大的常数是2到64,作为正常的字面值.我添加了下划线,以便更容易验证数字确实是一个后跟64位零.每个十六进制数字一如既往地代表四位.下划线是标准的Ruby语法.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有