【问题标题】:Translating C++ to python - memcpy uchar into int64将 C++ 转换为 python - memcpy uchar 转换为 int64
【发布时间】:2012-07-02 18:49:56
【问题描述】:

好的,我正在复制一些需要在我的服务器 (Python) 上运行的代码 (C++),一切都很顺利,直到下面这一点。

简而言之,这是我在 C++ 程序中的内容:

 int main() {
 ...
 ...
 int64 value = 0;
 bool blah = function1(&value);
 ...
 }

 bool function1(int64* value)
 {
 ...
 uchar pb[8];
 pb = '\x00\x00\x00\x00*Q \x00'; 
 memcpy(value,pb,8);
 //now value has the value '0x7fff33516970'
 }

是的,它创建了一些 char 数组,然后将值复制到 int64 中。

现在我的问题是:如何在 Python 中做到这一点?我的意思是,我有相当于 pb 的字节串,但我不知道从那里去哪里(尤其是因为所有这些零......)

【问题讨论】:

    标签: c++ python int64


    【解决方案1】:

    查看struct 模块,尤其是struct.unpack。你可以这样做:

    value, = unpack("q", string)

    "q" 表示 64 位有符号整数,字符串只是数字的原始字节表示。请记住,注意字节顺序!

    【讨论】:

    • 我查看了 struct 但我得到的值与我期望的不同(在同一台机器上)。 unpack("Q", array) 给出 9096440085217280 (但值应该是 140734054361456 )
    • '0x7fff33516970' 的值看起来不正确:print bin(long('0x7fff33516970',16)) 给出 0b11111111111111100110011010100010110100101110000。
    • 嗯,没错,\x00\x00\x00\x00*Q \x00 绝对不是0x7fff33516970。 @IamAlexAlright,您如何检查号码的值?你确定你打印的是*value,而不是value,这只是你变量的地址吗?
    【解决方案2】:

    单引号用于字符,而不是 C++ 中的字符串。应该是"\x00\x00\x00\x00*Q \x00"。此外,代码没有意义,因为内存分配给pb,然后它被一个常量字符串覆盖。

    【讨论】:

    • 这是一个好点; @IamAlexAlright,你的代码是真正的代码还是只是一个例子,当你试图表达它应该说什么时?
    • @tomasz:只是代码的解释——如果人们真的需要看到它,我可以粘贴整个内容(但我认为这与我的问题没有任何关系)
    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多