我試著叫這個// cryptography.gofunc getDecryptedMessage(message string, d int, prime1 int, prime2 int) *C.char {/////do something/////return C.CString("hello from go")}//app.pylib = cdll.LoadLibrary("./cryptography.so")class go_string(Structure): _fields_ = [ ("p", c_char_p), ("n", c_longlong)]lib.getDecryptedMessage.restype = c_char_pb = go_string(c_char_p(decryptedMsg), len(decryptedMsg))print (lib.getDecryptedMessage(b, c.d,c.prime1, c.prime2))它將打?。篵'hello from go'。結果應該是:hello from go我用它建造它go build -buildmode=c-shared -o cryptography.so cryptography.go任何人都可以幫助我嗎?編輯:我認為這一定有問題lib.getDecryptedMessage.restype = c_char_p這是一個較小的版本://app.pyfrom flask import Flask, jsonifyfrom flask import abortfrom flask import make_responsefrom flask import requestfrom flask_cors import CORSfrom ctypes import *import ctypeslib = cdll.LoadLibrary("./a.so")lib.getMessage.restype = c_char_pprint(lib.getMessage())//a.gopackage mainimport "C"//export getMessagefunc getMessage() *C.char { return C.CString("hello from go")}它會返回:b'hello from go'
1 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
它將打印:
b'hello from go'
。
這是完全正常的。C 字符串具有基于字節的類型。
在 Python 2 中,bytes
和str
類型是相同的,因此 Py2k 應用程序將 C 字符串視為字符串。在 Python 3 中,bytes
類型與類型不同str
。要將 a 轉換bytes
為 a str
,您必須根據其編碼對其進行解碼。一般來說,您可能會考慮盡量避免對其進行解碼,但如果必須對其進行解碼,您必須告訴 Python 解碼器它是如何編碼的:
print(lib.getMessage().decode('utf-8'))
例如。(Go 本身使用 utf-8 編碼,但其他 C 項目可能不使用任何合理的編碼。)
- 1 回答
- 0 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消