【问题标题】:How to get value from an address in python如何从python中的地址获取值
【发布时间】:2018-09-28 11:00:21
【问题描述】:

我正在尝试从 Python 中的地址读取值。

假设我在变量中有一个地址:address_vble= 0x900045A1

在 C 中,我们可以得到value = *address_vble

如何在 Python 中做同样的事情?

感谢您的帮助。

【问题讨论】:

标签: python


【解决方案1】:

你可以通过ctypes找到它

>>>import ctypes
>>>a = 5
>>>address = id(a)
>>>address
493382800
>>>ctypes.cast(address, ctypes.py_object).value
5

希望对你有帮助!

【讨论】:

  • 我猜你写的是一个如何获取变量'a'地址的例子。但就我而言,我已经知道内存地址。即address_vble= 0x900045A1。所以我想要的是获取存储在该地址上的值。我该怎么做?
  • id(a) 将给出变量 a 的地址,你可以在那里的任何其他地址,它会工作,为了告诉你我已经给出了这样的
  • @PrashuPratik,我已经更改了代码位让您理解,希望它会让您更加理解!!!
  • 只会采用十进制格式的“地址”吗?我用十六进制地址值(上面提到过)尝试了这段代码,它崩溃了。
  • 我尝试将地址转换为十进制格式。但它仍然在这一步崩溃:ctypes.cast(address, ctypes.py_object).value
【解决方案2】:

@PrashuPratik 我们可以将十六进制地址转换为整数,然后我们可以检查任何内存地址的值。

import ctypes
    x=id(a)
    x
    493382800
    y=hex(x)
    y
   '0xc545d0'
    z=int(y,base=16)  #this will convert the hexadecimal value into integer value
    ctypes.cast(x,ctypes.py_object).value
    5

int('hexadecimal',base=16) 通过使用这个你可以转换任何 十六进制数转为整数。

希望这能解决你的问题

【讨论】:

    【解决方案3】:

    通过内存地址访问值

    示例 1

    import ctypes
    sn = 1 # Value to store on sn
    value1 = sn # Value of sn
    print("value1 =",value1)
    memory_address = id(sn) # Get address of sn variable
    value2 = ctypes.cast(memory_address, ctypes.py_object).value #Get value from  address of sn variable
    print("value2 =",value2)
    

    示例 2

    import ctypes
    value3 = 100
    memory_address2=id(value3) # Getting address of variable
    print("value 3 =", value3)
    print("Memory Address (INT) =",memory_address2)
    memory_address3=hex(memory_address2) # Integer to hex conversion
    print("Memory Address (HEX) =",memory_address3)
    memory_address4=int(memory_address3, base=16) # Revert to Integer Type from hex
    print("Memory Address (INT) =",memory_address4)
    value4 = ctypes.cast(memory_address4, ctypes.py_object).value # Getting value of address
    print("value 4 =", value4)
    

    【讨论】:

    • 请提供一个描述所提供代码的句子。答案应该为每个社区成员提供信息。
    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2012-07-05
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多