Heim >Backend-Entwicklung >Golang >Wie kann ich ein uint64 in Go sicher in ein int64 konvertieren und dabei seine binäre Darstellung beibehalten?

Wie kann ich ein uint64 in Go sicher in ein int64 konvertieren und dabei seine binäre Darstellung beibehalten?

DDD
DDDOriginal
2024-11-27 06:43:13761Durchsuche

How Can I Safely Convert a uint64 to an int64 in Go, Preserving its Binary Representation?

Int-Überlaufkonvertierung in int64

In bestimmten Szenarien, insbesondere beim Umgang mit Hash-Funktionen, müssen Entwickler möglicherweise einen uint64-Wert in einen int64 konvertieren und dabei seine binäre Darstellung beibehalten . Dies scheint eine unkomplizierte Operation zu sein, kann jedoch aufgrund der Möglichkeit eines Überlaufs verwirrend sein.

Zum Beispiel generiert die Hash-Funktion murmur2 ein uint64-Ergebnis. Bei der Arbeit mit PostgreSQL, das nur int64 (64 Bit mit Vorzeichen) unterstützt, wünschen sich Entwickler möglicherweise eine Typkonvertierung, die den Binärwert des Hashs beibehält.

Glücklicherweise ist diese Konvertierung trivial. Verwenden Sie einfach eine Typkonvertierung:

i := uint64(0xffffffffffffffff)
i2 := int64(i)

Die resultierende Ausgabe ist:

18446744073709551615 -1

Es ist wichtig zu beachten, dass die Speicherdarstellung nach der Konvertierung dieselbe bleibt; Nur der Typ wird geändert.

Es gibt jedoch eine Einschränkung bei der Konvertierung untypisierter Ganzzahlkonstanten in int64. Zum Beispiel:

i3 := int64(0xffffffffffffffff) // Compile time error!

Der Versuch dieser Konvertierung führt zu einem Fehler bei der Kompilierung, da der Wert 0xffffffffffffffff den maximalen int64-Wert (0x7fffffffffffffff) überschreitet. In solchen Fällen müssen Entwickler einen uint64-Typ verwenden oder die Konvertierung explizit durchführen.

Das obige ist der detaillierte Inhalt vonWie kann ich ein uint64 in Go sicher in ein int64 konvertieren und dabei seine binäre Darstellung beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn