2015-07-30 22 views
8

Ho un oggetto [] byte e voglio ottenere la dimensione in byte. Esiste un equivalente a sizeof() di C in golang? In caso contrario, puoi suggerire altri modi per ottenere lo stesso?Dimensioni di un array di byte golang

+1

Vuoi la lunghezza, la capacità o la dimensione in memoria? Possono essere tutti diversi. – JimB

+0

No, len fornisce il numero di oggetti in una matrice, non le dimensioni in termini di byte dell'intero array. Immagino che @evanmcdonnal abbia capito bene .. –

+1

@ sr_149: non si ottiene la dimensione dell'array con 'binary.Size', si ottiene' length * data_type_size'. Questo può essere quello che vuoi, ma ricorda che la dimensione dell'array (capacità) è spesso diversa. – JimB

risposta

6

Penso che la vostra migliore scommessa sarebbe;

package main 

import "fmt" 
import "encoding/binary" 

func main() { 
    thousandBytes := make([]byte, 1000) 
    tenBytes := make([]byte, 10) 
    fmt.Println(binary.Size(tenBytes)) 
    fmt.Println(binary.Size(thousandBytes)) 
} 

https://play.golang.org/p/HhJif66VwY

Anche se ci sono molte opzioni, come solo l'importazione e l'utilizzo non sicuro sizeof;

import unsafe "unsafe" 

size := unsafe.Sizeof(bytes) 

Si noti che per alcuni tipi, come fette, Sizeof sta per darvi la dimensione del descrittore fetta che probabilmente non ciò che si desidera. Inoltre, tenere presente che la lunghezza e la capacità della sezione sono diverse e il valore restituito da binary.Size riflette la lunghezza.

+1

Non è solo facile per ottenere la dimensione del descrittore di slice con Sizeof, * solo * ottieni la dimensione del descrittore che è sempre 3 parole. – JimB

+0

Grazie! : D deve utilizzare il pacchetto codifica/binario –

+0

@JimB yes ma l'OP potrebbe occuparsi di un array di byte nel qual caso funziona; https://play.golang.org/p/UQUcQYC9F3 personalmente penso che il pacchetto binario funzioni meglio perché non ti darà la dimensione dei descrittori di slice ma l'OP ha fatto l'equivalente di sizeof che non è sicuro. Dimensione del file. – evanmcdonnal

7

Per riportare il numero di byte in una fetta byte utilizzare la funzione len:

bs := make([]byte, 1000) 
sz := len(bs) 
// sz == 1000 

Se si intende il numero di byte nella matrice sottostante usa cap invece:

bs := make([]byte, 1000, 2000) 
sz := cap(bs) 
// sz == 2000 

Un byte è garantito un byte: https://golang.org/ref/spec#Size_and_alignment_guarantees.

+0

Grazie a @Caleb, il Godoc ha sicuramente aiutato a chiarire ulteriormente le cose! –

Problemi correlati