Ich habe ein [] Byte-Objekt, und ich möchte die Größe davon in Bytes erhalten. Gibt es eine Entsprechung zu Cs Größe von() in Golang? Wenn nicht, können Sie andere Möglichkeiten vorschlagen, um dasselbe zu erreichen?Größe eines Byte-Arrays golang
Antwort
Ich denke, Ihre beste Wette wäre;
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
Zwar gibt es viele Möglichkeiten, wie nur unsicher Import und Verwendung von sizeof;
import unsafe "unsafe"
size := unsafe.Sizeof(bytes)
Beachten Sie, dass für einige Arten, wie Scheiben, Sizeof
wird die Größe des Slice-Descriptor geben, die nicht wahrscheinlich ist, was Sie wollen. Beachten Sie auch, dass die Länge und die Kapazität des Slices unterschiedlich sind und der von binary.Size zurückgegebene Wert die Länge widerspiegelt.
Es ist nicht einfach einfach Um die Größe des Slice-Deskriptors mit Sizeof zu erhalten, erhalten Sie * nur * die Größe des Deskriptors, die immer 3 Wörter ist. – JimB
Vielen Dank! : D sollte die Kodierung/Binär pkg –
@ JimB ja verwenden, aber das OP könnte mit einem Byte-Array zu tun, in welchem Fall es funktioniert; https://play.golang.org/p/UQUcQYC9F3 persönlich Ich denke, das Binär-Paket funktioniert besser, weil es Ihnen nicht die Scheibe Deskriptoren Größe geben wird, aber das OP tat, als für das Äquivalent der Größe, die unsicher ist. Größe von. – evanmcdonnal
Um die Anzahl der Bytes in einem Byte-Slice zurückkehren verwenden, um die len
Funktion:
bs := make([]byte, 1000)
sz := len(bs)
// sz == 1000
Wenn Sie die Anzahl der Bytes in der zugrunde liegenden Array cap
stattdessen bedeuten verwenden:
bs := make([]byte, 1000, 2000)
sz := cap(bs)
// sz == 2000
Ein Byte ist garantiert ein Byte: https://golang.org/ref/spec#Size_and_alignment_guarantees.
Dank @Caleb, das Godoc hat definitiv dazu beigetragen, die Dinge weiter zu klären! –
Möchten Sie die Länge, die Kapazität oder die Größe im Speicher? Sie können alle verschieden sein. – JimB
Nein, len gibt Ihnen die Anzahl der Objekte in einem Array, nicht die Größe in Bytes des gesamten Arrays. Ich denke, @evanmcdonnal hat es richtig gemacht. –
@ sr_149: Sie erhalten nicht die Größe des Arrays mit 'binary.Size', Sie erhalten die' length * data_type_size'. Dies kann sein, was Sie wollen, aber denken Sie daran, dass die Größe des Arrays (Kapazität) oft anders ist. – JimB