将 Ref{Cwstring}() 转换为字符串
Convert Ref{Cwstring}() to String
我目前正在为 ChakraCore JavaScript 引擎编写 ccall
绑定,并且有一个函数具有此定义:
CHAKRA_API JsStringToPointer(
_In_ JsValueRef stringValue,
_Outptr_result_buffer_(*stringLength) const WCHAR **stringPtr,
_Out_ size_t *stringLength
)
所以我通过以下方式创建了对 WCHAR 的引用:resultWC = Ref{Cwstring}()
我尝试了一堆转换函数来返回 String
,但还没有任何效果。我想我需要这个:https://docs.julialang.org/en/v0.6.1/stdlib/strings/#Base.transcode
但是 Base.transcode
想要一个 Vector/Array 并且我不知道如何在 Julia 中针对这种情况进行简单的 C 风格转换。
知道如何将 Ref{Cwstring}()
变成 String
吗?
你是对的,it's a problem。
在修复之前,您可以添加自己的方法:
function Base.unsafe_string(w::Cwstring)
ptr = convert(Ptr{Cwchar_t}, w)
ptr == C_NULL && throw(ArgumentError("cannot convert NULL to string"))
buf = Cwchar_t[]
i = 1
while true
c = unsafe_load(ptr, i)
if c == 0
break
end
push!(buf, c)
i += 1
end
return String(transcode(UInt8, buf))
end
然后你就可以通过
调用它了
unsafe_string(resultWC[])
我目前正在为 ChakraCore JavaScript 引擎编写 ccall
绑定,并且有一个函数具有此定义:
CHAKRA_API JsStringToPointer(
_In_ JsValueRef stringValue,
_Outptr_result_buffer_(*stringLength) const WCHAR **stringPtr,
_Out_ size_t *stringLength
)
所以我通过以下方式创建了对 WCHAR 的引用:resultWC = Ref{Cwstring}()
我尝试了一堆转换函数来返回 String
,但还没有任何效果。我想我需要这个:https://docs.julialang.org/en/v0.6.1/stdlib/strings/#Base.transcode
但是 Base.transcode
想要一个 Vector/Array 并且我不知道如何在 Julia 中针对这种情况进行简单的 C 风格转换。
知道如何将 Ref{Cwstring}()
变成 String
吗?
你是对的,it's a problem。
在修复之前,您可以添加自己的方法:
function Base.unsafe_string(w::Cwstring)
ptr = convert(Ptr{Cwchar_t}, w)
ptr == C_NULL && throw(ArgumentError("cannot convert NULL to string"))
buf = Cwchar_t[]
i = 1
while true
c = unsafe_load(ptr, i)
if c == 0
break
end
push!(buf, c)
i += 1
end
return String(transcode(UInt8, buf))
end
然后你就可以通过
调用它了unsafe_string(resultWC[])