如何从C字符缓冲区转换为字符串在XCode 14 Swift ?



有很多关于这个问题的参考资料,但似乎没有一个有效。我使用Xcode 14.1。我做错了什么?

在struct中有一个C缓冲区:

struct MY_C_STRUCT
{
char buff[256];   //Contains null-terminated C-string in UTF-8 encoding
};

,我有一个Swift结构体,我试图从MY_C_STRUCT::buff设置它的变量:

class MyStruct : ObservableObject
{
@Published public var Buff : String = ""
func from_MY_C_STRUCT(mi : MY_C_STRUCT)
{
Buff = String(cString: mi.buff)
}
}

这给了我在String(cString:)行:

调用初始化式时没有精确匹配

正如这篇博客所解释的,Swift导入固定大小的C数组作为元组!

将元组视为缓冲区的一种方法是使用withUnsafeBytes获得指向内存的指针,然后将该指针传递给String(cString:):

替换:

Buff = String(cString: mi.buff)

:

Buff = withUnsafeBytes(of: mi.buff) { (rawPtr) -> String in
let ptr = rawPtr.baseAddress!.assumingMemoryBound(to: CChar.self)
return String(cString: ptr)
}

相关内容

  • 没有找到相关文章

最新更新