bytearray中包含空字符的PyByteArray_AsString的解决方案
创始人
2025-01-12 21:00:20
0

由于 PyByteArray_AsString 只适用于不含空字符的 bytearray,如果在 bytearray 中含有空字符,转换为字符串会出现错误。但是可以通过使用 PyUnicode_AsUTF8AndSize 和 PyBytes_FromStringAndSize 函数来解决该问题。

以下是代码示例:

import ctypes
import sys

PY3 = sys.version_info[0] == 3

if PY3:
    get_buffer = memoryview
    unicode_type = str
    xrange = range
else:
    def get_buffer(m):
        return m

    unicode_type = unicode


def bytearray_as_string(bytearray_obj):
    buf = get_buffer(bytearray_obj)
    size = len(bytearray_obj)

    # Find the index of the first null character
    null_idx = -1
    for i in xrange(size):
        if buf[i] == b'\0':
            null_idx = i
            break

    if null_idx == -1:
        # No null characters found, use PyByteArray_AsString
        return ctypes.c_char_p(buf).value
    else:
        # Convert to PyUnicodeObject first
        # Use PyUnicode_AsUTF8AndSize to convert to UTF-8 encoded bytes
        # Use PyBytes_FromStringAndSize to convert the bytes to string
        unicode_obj = PyUnicode_DecodeUTF8(ctypes.c_char_p(buf).value, size, NULL)
        return PyBytes_AsString(PyUnicode_AsUTF8String(unicode_obj))


# Usage example
bytearray_obj = b'hello\0world'
print(bytearray_as_string(bytearray_obj))

使用 bytearray_as_string 函数来转换带空字符的 bytearray 会得到正确的字符串输出。

相关内容

热门资讯

现有说明如下!西西软件游戏辅助... 现有说明如下!西西软件游戏辅助,好像真的是有辅助下载(讲解有挂)-哔哩哔哩1、现有说明如下!西西软件...
目前!微乐卡五星有挂吗,一直真... 目前!微乐卡五星有挂吗,一直真的有辅助平台(有挂方针)-哔哩哔哩微乐卡五星有挂吗脚本下载中分为三种模...
随着!微信小程序挂件辅助,果然... 随着!微信小程序挂件辅助,果然是有辅助安装(有挂规律)-哔哩哔哩1、进入到微信小程序挂件辅助是否有挂...
来临!陕西三代辅助,竟然是真的... 来临!陕西三代辅助,竟然是真的辅助下载(有挂解密)-哔哩哔哩1、许多玩家不知道陕西三代辅助辅助怎么退...
今天上午!拱趴大菠萝辅助,确实... 今天上午!拱趴大菠萝辅助,确实存在有辅助插件(有挂细节)-哔哩哔哩进入游戏-大厅左侧-新手福利-激活...
围绕透视问题!随意玩聚乐部辅助... 围绕透视问题!随意玩聚乐部辅助,一贯存在有辅助工具(有挂细节)-哔哩哔哩1、玩家可以在随意玩聚乐部辅...
最终!友间十三道有什么窍门,都... 最终!友间十三道有什么窍门,都是存在有辅助安装(证实有挂)-哔哩哔哩1、点击下载安装,友间十三道有什...
推出新举措!福建大玩家辅助是真... 推出新举措!福建大玩家辅助是真的吗,一直存在有辅助修改器(有挂头条)-哔哩哔哩1、完成福建大玩家辅助...
此事备受玩家关注!潮汕汇透视辅... 此事备受玩家关注!潮汕汇透视辅助,都是真的有辅助软件(有挂秘笈)-哔哩哔哩1、潮汕汇透视辅助免费脚本...
随着!wepoker俱乐部开挂... 随着!wepoker俱乐部开挂,总是真的是有辅助修改器(有挂教程)-哔哩哔哩1、超多福利:超高返利,...