亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Python 調用 Go 字符串返回函數

從 Python 調用 Go 字符串返回函數

Go
忽然笑 2022-07-18 17:17:46
我試著叫這個// 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 中,bytesstr類型是相同的,因此 Py2k 應用程序將 C 字符串視為字符串。在 Python 3 中,bytes類型與類型不同str。要將 a 轉換bytes為 a str,您必須根據其編碼對其進行解碼。一般來說,您可能會考慮盡量避免對其進行解碼,但如果必須對其進行解碼,您必須告訴 Python 解碼器它是如何編碼的:

print(lib.getMessage().decode('utf-8'))

例如。(Go 本身使用 utf-8 編碼,但其他 C 項目可能不使用任何合理的編碼。)


查看完整回答
反對 回復 2022-07-18
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號