代码之家  ›  专栏  ›  技术社区  ›  Adeline

将字符串快速转换为缓冲区中的字节

  •  0
  • Adeline  · 技术社区  · 6 年前

    我有一个只包含ascii字符的swift字符串。我必须将它们放在char*缓冲区中,然后将其转换为void*并反向执行此过程,以获取返回的字符串。

    例子:

    bool query(const void* queryString, byte queryLength, void* replyBuffer, byte bufferLength);
    

    所以,我必须设置两个缓冲区。一个将保存我的查询字符串,另一个将包含180字节的应答。

    如何设置这两个缓冲区并来回复制字符串?我试着探索 _bridgeToObjectiveC().utf8String 以及不可删除的指针…但我感到失落…

    1 回复  |  直到 6 年前
        1
  •  1
  •   Martin R    6 年前

    这是设置缓冲区并将其传递给c函数的方法:

    let queryString = "Query ..."
    
    let queryBuffer = Array(queryString.utf8)
    var replyBuffer = Array(repeating: UInt8(0), count: 180)
    
    let result = query(queryBuffer, numericCast(queryBuffer.count), &replyBuffer, numericCast(replyBuffer.count))
    

    queryBuffer 是字符串的utf-8表示形式的数组, 和 replyBuffer 包含指定数量的零字节的数组。

    数组通过 查询缓冲区 &replyBuffer ,分别将指针传递给元素存储 到C函数。

    如果返回时结果缓冲区中填充了以空结尾的C字符串 然后你可以用

    let resultString = String(cString: replyBuffer)