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 会得到正确的字符串输出。

相关内容

热门资讯

科技通报辅助器!欢乐茶馆辅助器... 科技通报辅助器!欢乐茶馆辅助器AIapp,欢乐茶馆多功能确实有辅助器app1、欢乐茶馆辅助器安装包、...
大神推荐透视挂!至尊娱乐城透视... 大神推荐透视挂!至尊娱乐城透视挂AI插件,至尊娱乐城多功能果然真的有透视挂插件至尊娱乐城能透视中分为...
揭秘作弊器!皮皮衡阳字牌作弊器... 揭秘作弊器!皮皮衡阳字牌作弊器AI方法,皮皮衡阳字牌多功能果然存在有作弊器方法1、让任何用户在无需皮...
一分钟揭秘透视挂!湘中竞技透视... 一分钟揭秘透视挂!湘中竞技透视挂AI方法,湘中竞技多功能果然是真的有透视挂方法;1、湘中竞技免费辅助...
我来教大家开挂!八喜休闲开挂A... 我来教大家开挂!八喜休闲开挂AI教程,八喜休闲多功能本来是真的有开挂教程1)八喜休闲辅助插件:进一步...
总算了解作弊器!娱家麻将作弊器... 总算了解作弊器!娱家麻将作弊器AI脚本,娱家麻将多功能果然真的是有作弊器脚本小薇(辅助器软件下载)致...
总算清楚开挂!老地方开挂AI脚... 总算清楚开挂!老地方开挂AI脚本,老地方多功能都是存在有开挂脚本老地方能透视中分为三种模型:老地方模...
我来教教大家辅助器!星际互联辅... 我来教教大家辅助器!星际互联辅助器AI方法,星际互联多功能其实有辅助器方法1、星际互联模拟器是什么优...
记者揭秘开挂!werplan开... 记者揭秘开挂!werplan开挂AI插件,werplan多功能确实是真的有开挂插件1、操作简单,无需...
推荐一款作弊器!至尊娱乐城作弊... 推荐一款作弊器!至尊娱乐城作弊器AI插件,至尊娱乐城多功能确实是真的有作弊器插件亲,关键说明,至尊娱...