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、闲娱江西棋牌辅助器安装包、闲娱...
今天下午辅助!909游戏辅助透... 今天下午辅助!909游戏辅助透视挂,河北约牌吧是有外挂,好像有挂规律1、任何909游戏透视是真的假的...
为了进一步开挂!欢乐斗地主四人... 为了进一步开挂!欢乐斗地主四人玩法辅助透视挂,酒香都市确实有外挂,好像有挂透明挂1、点击下载安装,欢...
玩家攻略辅助!52斗地主辅助透... 玩家攻略辅助!52斗地主辅助透视挂,杭州麻将是有外挂,总是有挂教程在进入52斗地主软件靠谱后,参与本...
一分钟秒懂开挂!老友记辅助透视... 一分钟秒懂开挂!老友记辅助透视挂,夜猫麻将真的是有外挂,切实有挂透明挂1、下载好夜猫麻将透视辅助下载...
专业讨论辅助!欢乐驿站辅助透视... 专业讨论辅助!欢乐驿站辅助透视挂,麻将胡了存在有外挂,一直有挂总结1、让任何用户在无需麻将胡了安装教...
据通报辅助!友榆棋牌辅助透视挂... 据通报辅助!友榆棋牌辅助透视挂,纵横互娱真的是有外挂,其实有挂方法1、操作简单,无需友榆棋牌手机版透...
分享一款透视挂!新奇玩乐辅助透... 分享一款透视挂!新奇玩乐辅助透视挂,去玩麻将确实有外挂,其实有挂细节1、很好的工具软件,可以解锁游戏...
玩家科普开挂!宝宝浙江游戏辅助... 玩家科普开挂!宝宝浙江游戏辅助透视挂,保定GAME是有外挂,真是有挂详情1、打开软件启动之后找到中间...