Python 如何在ctypes中将无符号字节数组转换为base64字符串

Python 如何在ctypes中将无符号字节数组转换为base64字符串,python,ctypes,Python,Ctypes,我有一个从C SDK返回的图像缓冲区 我可以写入本地图像并将其作为base64字符串读取,但这需要额外的步骤 如何将字节数组直接转换为base64字符串,以便在网络请求中发送它 image = (ctypes.c_ubyte*s.dwDataLen)() ctypes.memmove(image, s.pBuffer, s.dwDataLen) 我尝试使用base64.encodestring,但出现了此错误 TypeError: expected single byte elements,

我有一个从C SDK返回的图像缓冲区

我可以写入本地图像并将其作为
base64
字符串读取,但这需要额外的步骤

如何将字节数组直接转换为base64字符串,以便在网络请求中发送它

image = (ctypes.c_ubyte*s.dwDataLen)()
ctypes.memmove(image, s.pBuffer, s.dwDataLen)
我尝试使用
base64.encodestring
,但出现了此错误

TypeError: expected single byte elements, not '<B' from c_ubyte_Array_8716

TypeError:应为单字节元素,而不是“您可以使用
base64
模块

import base64

with open("yourfile.ext", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())
情况与

类似,请尝试以下操作:

import ctypes
import base64

image = (ctypes.c_ubyte * s.dwDataLen)()
ctypes.memmove(image, s.pBuffer, s.dwDataLen)
# Convert the image to an array of bytes
buffer = bytearray(image)
encoded = base64.encodebytes(buffer)
如果您使用的是
base64.b64encode
,您应该能够将
图像
传递给它:

import ctypes
import base64

image = (ctypes.c_ubyte * s.dwDataLen)()
ctypes.memmove(image, s.pBuffer, s.dwDataLen)
encoded = base64.b64encode(image)

这将需要额外的写和读操作。是否有一种方法可以将字节直接转换为b64字符串?可能的重复项请查看答案的哪一部分对您的问题有效?s.pBuffer的类型是什么?可能有一种方法可以消除到另一个缓冲区类型的额外副本。@DavidCullen答案的第二部分,带有
base64.b64encode