【问题标题】:How to find number of bytes in a variable? [duplicate]如何查找变量中的字节数? [复制]
【发布时间】:2012-12-14 04:01:19
【问题描述】:

可能重复:
How do I determine the size of an object in Python?

如果我这样做的话,在 C 中

USHORT x;
ULONG y;
ULONGLONG yy;

printf("%d %d %d\n", sizeof(x), sizeof(y), sizeof(yy))

输出:2 4 8

如果我要这样做,我如何在 Python 中得到它

valByte = 0x16
valWord = 0x1234
valDWord = 0x12345678
val64Word = 0x1234567887654321

我期望的输出应该是 1、2、4、8

谢谢

【问题讨论】:

  • Python 并不是这样工作的——你到底想做什么?
  • Python 整数没有 大小。你想达到什么目的?
  • @MartijnPieters 肯定有,只是有所不同。你可以使用sys.getsizeof,尽管它给出的值可能不应该使用任何东西。
  • @kwatford:你真的尝试过在整数上使用那个函数吗?
  • @kwatford:它返回python当前实例所需的字节数,是的,它恰好与python整数的大小有(少量)相关。但我怀疑它对 OP 有什么用处。

标签: python


【解决方案1】:

在 Python3 中有 bit_length 方法:

>>> import math

>>> math.ceil(0x16.bit_length()/8)
1
>>> math.ceil(0x1234.bit_length()/8)
2
>>> math.ceil(0x12345678.bit_length()/8)
4
>>> math.ceil(0x1234567887654321.bit_length()/8)
8

在 Python2.7 中,long 整数也有 bit_length 方法:

>>> (10**20).bit_length()
67

>>> x = 123
>>> long(x).bit_length()
7

【讨论】:

  • 这太棒了,回答了我的问题。我来自 C 世界,正在将 C 程序移植到 Python。我提到的这些值代表寄存器宽度,它们有各种大小。我需要知道寄存器的大小,非常感谢unutbu
  • 但是有一个问题请...我必须使用变量名,我不能使用实际数字对吗?在我的情况下,变量名始终是 reg。 reg 可以保存任何一个值,字节,字......仅举个例子,我给出了不同的名称。 reg.bit_length 不起作用。那么如何使用变量名做同样的工作呢?
  • @SanthoshKumar:reg.bit_length() 会起作用。你确定你需要在 Python 中担心这个吗?我怀疑你正在做从 C 到 Python 的翻译,并且有一种更简单的方法可以实现你的目标。您将如何处理这些“整数大小”?
  • 在 C 中这是程序:
  • 抱歉忽略以上评论。我的想法是检查每个位是否从右到左设置(LSB 到 MSB),如果设置了该位,则打印出该位的含义。就像错误寄存器或状态寄存器一样。 for i in range(reg): shift = reg & (1
【解决方案2】:

您可以使用sys.getsizeof,但结果可能很烦人,因为整数可以有最小值。

例如,在我的 64 位 PC 中,所有变量的大小都是 24 字节。

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-09-11
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多