go [] [] 바이트에서 C ** char로 변환하고 싶습니다. 즉, C에서 char double 포인터로 변환하고자하는 바이트 행렬을 가지고 있습니다.에 변환하는 방법은 [] [byte]에서 ** char로 변환 **
입력으로 [] [] 바이트를 가져야하고 산출.
((*C.char)(unsafe.Pointer(&data[0])))
그러나 두 번째 차원으로이 사건을 확장하는 것이 가능하지 않는 것 :
나는 * 같은 것을 수행하여 문자 []를 바이트로 변환 할 수 있습니다 알고 있습니다. 나는 [[] [] 바이트를 새로운 [] 바이트로 팩하는 꽤 정교한 것을 시도했다. 그런 다음 [] 바이트를 포인터 연산을 사용하여 올바른 위치에있는 [] 바이트를 가리키는 ** 문자를 만드는 C 함수에 보냅니다.
이 변환은 내 데이터가 몇 번의 반복에 대해 정확하지만 겉으로는 함수 호출간에 손상되는 이상한 동작을 제공합니다.
누구나 아이디어가 있다면 정말 고맙겠습니다.
응답에서 볼 때, 원시 데이터가 아닌 문자열로 작업하는 것이 중요하다는 것을 알 수 있습니다. 따라서 go 바이트 유형입니다. 따라서 C 문자열 터미네이터가 추가되면 원래 데이터가 손상됩니다. char는 크기가 1 바이트이므로 C ** char 만 사용하고 있습니다. 즉, 응답 주셔서 감사합니다. 나는 내 요구에 맞는 대답을 받아 들일 수 있었다.
C 문자열에 널 문자가 있다고 생각하지 않습니까? 귀하의 사례가 효과가 있었지만 운이 좋았다고 생각됩니다! –
아주 좋아요. '* element = (* C.char) (unsafe.Pointer (& list [i] [0]))'줄은'* element = C를 읽는 것이 이상적이다.CString (string (list [i]))' – jimt
잠깐, C 구조체가 null로 끝나야 만하는 이유는 무엇입니까? 제가 문자열로 작업하고 있다고 가정하지 마십시오. 원시 데이터 버퍼로 작업하고 있습니다. 그렇다면 문자열 함수가 여전히 사용되어야합니까? –