Я пишу клиент-серверное приложение в Go. Я хочу выполнить кастинг типа C в Go.Переход преобразования между массивом struct и byte
E.g. в Go
type packet struct {
opcode uint16
data [1024]byte
}
var pkt1 packet
...
n, raddr, err := conn.ReadFromUDP(pkt1) // error here
Также я хочу, чтобы выполнить C-подобный тетсру(), которая позволит мне непосредственно сопоставить поток сети байт, полученный на структуру.
например. с выше получил PKT1
type file_info struct {
file_size uint32 // 4 bytes
file_name [1020]byte
}
var file file_info
if (pkt1.opcode == WRITE) {
memcpy(&file, pkt1.data, 1024)
}
Я рекомендую попробовать записать его в ходу первого. Вы просто не делали бы ничего подобного. Помимо прочего, у go нет кастинга. 'uint' также не 4 байта. 'Conn.Read' принимает' [] byte', который является эффективным интеллектуальным указателем размера в массив подстановки. У вас будет намного лучшее время, просто записывая это в go. – Dustin
Вы уже видели встроенную двоичную сериализацию с пакетом 'encoding/gob'? – dyoo