다음은 '방법' 형식을 염두에 두고 기사 내용에 맞는 몇 가지 질문 기반 제목입니다. * Go에서 구조체와 바이트 배열 사이를 어떻게 변환합니까? * 바이트 배열로 구조화

Barbara Streisand
풀어 주다: 2024-10-28 05:57:30
원래의
417명이 탐색했습니다.

Here are a few question-based titles  that fit the content of your article, keeping in mind the “How to” format:

* How Do You Convert Between Structs and Byte Arrays in Go? 
* Go Struct to Byte Array: Best Practices & Techniques
* How to Perform C-like M

Go에서 구조체와 바이트 배열 간 변환

Go에서는 구조체와 바이트 배열 간에 변환이 필요한 상황에 직면할 수 있습니다. 또는 유형 캐스팅 및 메모리 복사와 같은 C와 유사한 작업을 수행합니다. 이 기사에서는 이러한 작업에 대한 솔루션을 살펴봅니다.

유형 캐스팅

Go는 C와 유사한 유형 캐스팅을 지원하지 않지만 unsafe.Pointer 유형을 사용하여 유사한 작업을 수행할 수 있습니다. 운영. 구조체를 바이트 배열로 변환하려면 unsafe.Pointer() 함수를 사용하여 구조체의 주소를 포인터로 변환하세요.

<code class="go">type packet struct {
    opcode uint16
    data [1024]byte
}

var pkt1 packet

// Convert pkt1 to a byte array
byteArray := (*[unsafe.Sizeof(pkt1)]byte)(unsafe.Pointer(&pkt1))</code>
로그인 후 복사

바이트 배열을 다시 구조체로 변환하려면 unsafe.Pointer를 사용하세요. () 함수를 다시 사용하여 바이트 배열 포인터를 원하는 구조체 유형으로 캐스팅합니다.

<code class="go">// Convert byteArray back to a packet struct
pkt2 := *(**packet)(unsafe.Pointer(&byteArray))</code>
로그인 후 복사

Memory Copy

Go에는 memcpy와 직접적으로 동일한 기능이 없습니다. () 함수에서는 copy() 함수를 사용하여 메모리 복사를 수행할 수 있습니다. 바이트 배열의 데이터를 구조체로 복사하려면 다음 구문을 사용할 수 있습니다.

<code class="go">type file_info struct {
    file_size uint32       // 4 bytes
    file_name [1020]byte
}

var file file_info
copy(unsafe.Pointer(&file), pkt1.data)  // Copy data from pkt1.data to file</code>
로그인 후 복사

인코딩/바이너리 패키지 사용

대신 unsafe.Pointer를 사용하면 인코딩/바이너리 패키지를 사용하여 구조체와 바이트 배열 간의 유형 변환을 처리할 수 있습니다. 이 패키지는 바이너리 형식의 데이터를 인코딩 및 디코딩하는 기능을 제공하므로 엔디안 및 데이터 크기를 더 쉽게 처리할 수 있습니다.

<code class="go">// Convert a struct to a byte array
t := T{A: 0xEEFFEEFF, B: 3.14}
var buf bytes.Buffer
binary.Write(&buf, binary.BigEndian, t)  // Encode struct t to buf

// Convert a byte array to a struct
t2 := T{}
binary.Read(&buf, binary.BigEndian, &t2)  // Decode byte array buf into struct t2</code>
로그인 후 복사

위 내용은 다음은 '방법' 형식을 염두에 두고 기사 내용에 맞는 몇 가지 질문 기반 제목입니다. * Go에서 구조체와 바이트 배열 사이를 어떻게 변환합니까? * 바이트 배열로 구조화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!