簡體   English   中英

python中memcpy的替代方法是什么?

[英]What is the alternative of memcpy in python?

我在python中有一個類對象。 我想通過TCP發送該對象值。

我知道是否是C ++,可以像下面這樣發送。

class Abc
{
    int x;
    float y;
    string x;
};

Abc Obj;
char* data = new char[sizeof(Abc)];
memcpy(data, &obj, sizeof(Abc));
tcpsender.send(data);    // may be incorrect syntax

因此,數據將作為字節發送到目的地。

現在我必須在Python中執行此操作。

這兩條線的替代部分是什么?

/*
char* data = new char[sizeof(Abc)];
memcpy(data, &obj, sizeof(Abc));
*/

它不等同於C memcpy ,但是如果您的要求是通過TCP發送對象並在另一端進行重構,則pickle模塊適合您。

目標是將對象存儲在順序文件或字符串中並進行檢索,包括跨不同體系結構。

編輯:來自Python 3.4 的Python標准庫手冊中的示例:

對於最簡單的代碼,請使用dump()和load()函數。

import pickle

# An arbitrary collection of objects supported by pickle.
data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': set([None, True, False])
}

with open('data.pickle', 'wb') as f:
    # Pickle the 'data' dictionary using the highest protocol available.
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

以下示例讀取所得的腌制數據。

import pickle

with open('data.pickle', 'rb') as f:
    # The protocol version used is detected automatically, so we do not
    # have to specify it.
    data = pickle.load(f)

struct軟件包可以為您完成此任務。

import struct

fmt = 'if10p'
data = struct.pack(fmt, 42, 1.234, 'hello')
print struct.unpack(fmt, data)

您必須指定字符串的最大長度(此處為10)。 您的C ++版本不起作用,因為字符串的原始字節將包含指針而不是字符串中的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM