python - gdb python pretty-print uint64_t 被解释为有符号

标签 python c signedness

当我尝试使用时:

class MyPrinter:
        def __init__(self, val):
                self.val = val

        def to_string(self):
                return str(self.val['fData'][0]) + ":" + "%016x" % (self.val['fData'][0]).cast(gdb.lookup_type("uint64_t"))

打印
2929725441843584891:28a879c45a82df7b
但也
9918728419520062851:-7659990ddaef5a7d

当为 val 设置最高有效位时,它被解释为有符号。

fData[]uint64_t

我怎样才能避免这种情况?我的所有值都应该是无符号的。

最佳答案

至少作为一种解决方法,这对我有用:

class MyPrinter:
        def __init__(self, val):
                self.val = val

        def to_hex(self, val):
                s = ''
                x = 7
                while (x >= 0):
                        s = s + "%02x" % ((val>>(x*8))&255)
                        x -= 1

                return s

        def to_string(self):
                return self.to_hex(self.val['fData'][0]) + self.to_hex(self.val['fData'][1])

关于python - gdb python pretty-print uint64_t 被解释为有符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48546215/

相关文章:

c - 尝试在 C 中创建一个函数,将一个字符串复制到另一个字符串

python - 通过索引获取字符串的多个字符

python - 如何正确定义和使用 Python 生成器

Python - 使用数组进行数据处理

python - 如何在 Python 3.3.5 中添加矩阵的对角线

c++ - 字符签名最严重的副作用。 (解释符号对字符和类型转换的影响)

c++ - 编程语言函数在内存中位于哪里?

c - glib GHashtable 取消引用 gpointer

c++ - 每次我知道我正在处理无符号值时,我都应该使用 "unsigned"吗?

无法对齐 "pointer targets signedness"