How to find number of bytes in a variable?
Possible Duplicate:
How do I determine the size of an object in Python?
如果我在C
1 2 3 4 5 6
| USHORT x;
ULONG y;
ULONGLONG yy;
printf("%d %d %d
", sizeof(x), sizeof(y), sizeof(yy)) |
产量:2 4 4
如果我要在python中得到这个
1 2 3 4
| valByte = 0x16
valWord = 0x1234
valDWord = 0x12345678
val64Word = 0x1234567887654321 |
我期望的输出应该是1、2、4、8
谢谢
- python不是真的那样工作的-你到底想做什么?
- python整数没有大小。你想达到什么目的?
- @马蒂·皮耶特肯定是这样的,只是有些不同。您可以使用sys.getsizeof,尽管它给出的值可能不用于任何内容。
- @夸福德:你真的试过在整数上使用这个函数吗?
- @martijnpieers是的,它根据存储整数所需的字节数返回不同的值。
- @Kwatford:它返回了python当前需要的实例字节数,是的,它恰好与python整数的大小相关(数量很小)。但我怀疑这对手术是否有用。
- 就像我说的,可能不应该被用来做任何事情。如果他只是为了提供信息("我想知道这个数据结构占用了多少内存"),那么可以使用它。不过,对于你在C.OP中使用的大部分尺寸来说,还没有说他真正需要什么。
- 为了便于参考,我画了一个图:stackoverflow.com/a/30008338/2087463,很有意思看到…
python3中有位长度法:
1 2 3 4 5 6 7 8 9 10
| >>> 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方法:
1 2 3 4 5 6
| >>> (10**20).bit_length()
67
>>> x = 123
>>> long(x).bit_length()
7 |
- 这太棒了,回答了我的问题。我来自C世界,正在将C程序移植到Python。我提到的这些值代表寄存器宽度,它们有各种大小。我需要知道登记册的大小,非常感谢你。
- 不过有一个问题…我必须使用变量名,我不能使用实际的数字对吗?在我的例子中,变量名总是reg。Reg可以保存任何一个值、字节、字…举个例子,我给出了不同的名字。寄存器位长度不起作用。那么,如何对变量名执行相同的工作呢?
- @Santhoshkumar:reg.bit_length()会起作用。您确定需要在python中担心这个问题吗?我怀疑您在从C到Python的文字转换中做得太过了,而且有一种更简单的方法可以实现您的目标。你将如何处理这些"整数大小"?
- 在C语言中,这是程序:
- 抱歉,忽略上述评论。我的想法是检查每个位是否从右到左(lsb到msb)设置,如果该位设置了,则打印出该位的含义。比如错误寄存器或状态寄存器。对于i in range(reg):shift=reg&;(1<
- 顺便说一句,我尝试了reg.bit_length(),但它给了我一个错误:attributeError:'int'对象没有属性'bit_length'
- 目前,我已经硬编码了可能的最高位值(64),它可以工作,但我希望删除范围(64)内i的硬编码regval=0x16:bittval=regval&;(1<
- @Santhoshkumar:(1):reg.bit_length()只在python3工作,不在python2工作。你收到的AttributeError强烈建议你使用python2。但是,在python2中,long整数确实有bit_length方法,所以可以使用long(reg).bit_length()方法。(2):python long整数没有边界。它们当然可以大于64位。例如,(10**20).bit_length()是67。(3):您的代码建议您使用regVal的二进制字符串表示。这可以用'{0:b}'.format(regVal)来完成。(4):注意内德·巴切尔德的评论。他总是对的。:)
- 更正:在python2.7中,longs采用bit_length法。在早期版本的python中,使用docs中显示的bit_length函数。
- 对!!医生帮了我,我完了。抱歉,我被2.6困住了,不能自由地使用更高版本的python。多亏了这一切,案子才能结案。
您可以使用sys.getsizeof,但结果可能会很烦人,因为整数可以是最小值。
例如,在我的64位PC中,所有变量的大小都是24字节。