Inhaltsverzeichnis
Richtige Antwort
Heim Backend-Entwicklung Golang Wie konvertiere ich Bytes in ein Float32-Array in Go?

Wie konvertiere ich Bytes in ein Float32-Array in Go?

Feb 06, 2024 am 08:33 AM
overflow

Go 中如何将字节转换为 float32 数组?

Frageninhalt

Ich schreibe ein Array von Float32-Zahlen im Byte-Format aus einem Python-Skript in einen Elasticache-Redis-Cluster und lese dann die Bytes (als String) aus Elasticache in einem Go-Skript. Wie konvertiere ich Bytes als String im Go-Skript zurück in das ursprüngliche Float32-Array?

Python-Beispiel:

import numpy as np
import redis
a = np.array([1.1, 2.2, 3.3], dtype=np.float32)
a_bytes = a.tobytes(order="C") #I have also tried order="F" with no luck
print(a_bytes) #Output: b'\xcd\xcc\x8c?\xcd\xcc\x0c@33S@'
redis_client = redis.cluster.RedisCluster(host=<elasticache config endpoint>, port=6379)
redis_client.mset_nonatomic({"key1": a_bytes})
Nach dem Login kopieren

Dies ist ein Beispiel, das ich in Go (Spielplatz) ausprobiert habe

package main

import (
    "fmt"
    "math"
    "strconv"
)

func main() {
    // aBytesStr is an example value retrieved from Elasticache
    // aBytesStr is type string, not raw bytes
    var aBytesStr string = "\xcd\xcc\x8c?\xcd\xcc\x0c@33S@"
    aHex := fmt.Sprintf("%X", aBytesStr)
    fmt.Println(aHex) // Output: CDCC8C3FCDCC0C4033335340
    var aArr [3]float32
    for i := 0; i < 3; i++ {
        aHex1 := aHex[i*8 : i*8+8]
        aParsed, err := strconv.ParseUint(aHex1, 16, 32)
        if err != nil {
            return
        }
        aArr[i] = math.Float32frombits(uint32(aParsed))
    }
    fmt.Println(aArr)
    // Expected output: [1.1 2.2 3.3]
    // Actual output [-4.289679e+08 -4.2791936e+08 4.17524e-08]
}
Nach dem Login kopieren


Richtige Antwort


Der Beispielcode, den Sie verwendet haben, ist „Hex konvertieren, dargestellt als Zeichenfolge“; Sie haben die Rohbytes (ich glaube, basierend auf aHex:CDCC8C3FCDCC0C4033335340), sodass eine direkte Konvertierung einfacher ist (obwohl Sie nur Bytes in a konvertieren könnten). Hex-String erstellen und dann die Konvertierung durchführen, es fügt nur unnötige Arbeit/Komplexität hinzu).

Aus dieser Antwort erhalten wir (Spielplatz):

func GetFloatArray(aBytes []byte) []float32 {
    aArr := make([]float32, 3)
    for i := 0; i < 3; i++ {
        aArr[i] = BytesFloat32(aBytes[i*4:])
    }
    return aArr
}

func BytesFloat32(bytes []byte) float32 {
    bits := binary.LittleEndian.Uint32(bytes)
    float := math.Float32frombits(bits)
    return float
}
Nach dem Login kopieren

Aktualisierte Referenzkommentare:

Ich bin immer noch etwas verwirrt darüber, was Sie erhalten haben, also probieren wir beide Möglichkeiten aus.

Wenn die Redis-Abfrage Rohdaten (Bytes) als Go-String (d. h. "xcdxccx8c?xcdxccx0c@33S@") zurückgibt, können Sie Konvertieren "xcdxccx8c?xcdxccx0c@33S@"),那么你可以 转换为 []byte in []byte (Playground)

func main() {
    var aBytesStr string = "\xcd\xcc\x8c?\xcd\xcc\x0c@33S@"
    fmt.Println(GetFloatArray([]byte(aBytesStr)))
}
Nach dem Login kopieren

Wenn Redis eine Zeichenfolge zurückgibt, die eine ASCII-Darstellung (/UTF-8) enthält (d. h. CDCC = []byte{0x41, 0x44, 0x43, 0x43}), ist es wahrscheinlich am einfachsten, diese mit encoding/hex (Playground)

zu dekodieren
func main() {
    aHex := "CDCC8C3FCDCC0C4033335340"
    b, err := hex.DecodeString(aHex)
    if err != nil {
        panic(err)
    }
    fmt.Println(GetFloatArray(b))
}
Nach dem Login kopieren

Beachten Sie, dass Ihr ursprünglicher Ansatz funktionieren könnte. Wie jedoch in den Kommentaren oben erwähnt, müssen Sie sich mit Endianness befassen, damit das Folgende funktioniert (Playground – Sie können effizienter sein, ich bin hier, um Klarheit zu schaffen) :

byte1 := aHex[i*8 : i*8+2]
byte2 := aHex[i*8+2 : i*8+4]
byte3 := aHex[i*8+4 : i*8+6]
byte4 := aHex[i*8+6 : i*8+8]
aParsed, err := strconv.ParseUint(byte4+byte3+byte2+byte1, 16, 32)
Nach dem Login kopieren

Dabei werden jedoch Annahmen über die CPU getroffen, auf der der Code ausgeführt wird, was bedeutet, dass die vorherige Antwort vorzuziehen ist.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Bytes in ein Float32-Array in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Jan 15, 2025 pm 08:11 PM

Seit seiner Einführung im Jahr 2009 hat sich Bitcoin zu einem führenden Unternehmen in der Welt der Kryptowährungen entwickelt und sein Preis hat enorme Schwankungen erfahren. Um einen umfassenden historischen Überblick zu bieten, stellt dieser Artikel Bitcoin-Preisdaten von 2009 bis 2025 zusammen und deckt wichtige Marktereignisse, Änderungen der Marktstimmung und wichtige Faktoren ab, die die Preisbewegungen beeinflussen.

Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist May 06, 2024 pm 01:20 PM

1. Klicken Sie zunächst mit der rechten Maustaste auf die leere Stelle der Taskleiste unten in Windows 11 und wählen Sie [Taskleisteneinstellungen]. 2. Suchen Sie rechts in den Taskleisteneinstellungen nach [taskbarcorneroverflow]. 3. Suchen Sie dann darüber nach [Uhr] oder [Uhr] und aktivieren Sie die Funktion. Methode 2: 1. Drücken Sie die Tastenkombination [win+r], um run aufzurufen, geben Sie [regedit] ein und drücken Sie zur Bestätigung die Eingabetaste. 2. Öffnen Sie den Registrierungseditor, suchen Sie darin nach [HKEY_CURRENT_USERControlPanel] und löschen Sie es. 3. Nach dem Löschen starten Sie den Computer neu und Sie werden zur Konfiguration aufgefordert. Wenn Sie zum System zurückkehren, wird die Uhrzeit angezeigt.

Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann? Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann? Apr 28, 2024 pm 02:12 PM

Antwort: Die folgenden Community-Foren und Diskussionsgruppen stehen für Fragen zur funktionalen Java-Programmierung zur Verfügung: StackOverflow: Die weltweit größte Q&A-Website zur Programmierung mit einer Community von Experten für funktionale Java-Programmierung. JavaFunctionalProgramming: Ein Community-Forum, das sich auf die funktionale Java-Programmierung konzentriert und Diskussionen zu Konzepten, Sprachfunktionen und Best Practices bietet. Redditr/Functionaljava: Ein Subreddit mit Schwerpunkt auf funktionaler Java-Programmierung, mit Schwerpunkt auf Tools, Bibliotheken und Technologien. Discord: JavaFunctional Programming: Discord-Dienst, der Diskussionen, Code-Sharing und Zusammenarbeit in Echtzeit ermöglicht

So verwenden Sie den Code anderer Leute in Python So verwenden Sie den Code anderer Leute in Python May 05, 2024 pm 07:54 PM

Wie verwende ich den Python-Code anderer Leute? Code-Repositories finden: Finden Sie den benötigten Code auf Plattformen wie PyPI und GitHub. Installationscode: Verwenden Sie pip oder klonen Sie das GitHub-Repository zur Installation. Module importieren: Verwenden Sie die Importanweisung in Ihrem Skript, um installierte Module zu importieren. Arbeiten mit Code: Zugriff auf Funktionen und Klassen in Modulen. (Optional) Passen Sie den Code an: Ändern Sie den Code nach Bedarf, um ihn an Ihr Projekt anzupassen.

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein May 03, 2024 pm 09:20 PM

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? Wir alle stellen die Uhrzeit oder den Kalender ein, wenn wir das Win11-System verwenden, aber viele Benutzer fragen sich, dass die Computerzeit immer falsch ist. Was ist also los? Benutzer können direkt auf die Taskleiste unten klicken und dann den Taskbarcorneroverflow suchen, um ihn einzurichten. Auf dieser Website erfahren Sie ausführlich, wie Sie den Zeitfehler auf Win11-Computern anpassen können. So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein. Methode 1: 1. Wir klicken zunächst mit der rechten Maustaste auf die leere Stelle der Taskleiste unten und wählen „Taskleisteneinstellungen“. Methode 2: 1. Drücken Sie die Tastenkombination Win+R, um Ausführen aufzurufen, geben Sie regedit ein und drücken Sie zur Bestätigung die Eingabetaste.

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung May 03, 2024 pm 02:09 PM

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen bei der Entwicklung von Java-Funktionen Während der Entwicklung von Java-Funktionen können verschiedene Ausnahmen auftreten, die die korrekte Ausführung der Funktion beeinträchtigen. Im Folgenden sind häufige Ausnahmetypen und ihre Reparaturmaßnahmen aufgeführt: 1. NullPointerException Beschreibung: Wird beim Zugriff auf ein Objekt ausgelöst, das nicht initialisiert wurde. Fix: Stellen Sie sicher, dass Sie das Objekt auf Nicht-Null-Werte überprüfen, bevor Sie es verwenden. Beispielcode: try{Stringname=null;System.out.println(name.length());}catch(NullPointerExceptione){

Was bedeutet Überlauf in CSS? Was bedeutet Überlauf in CSS? Apr 28, 2024 pm 03:15 PM

Überlauf ist eine Eigenschaft von CSS, die verwendet wird, um den Anzeigemodus des Elementinhalts zu steuern, wenn er den Container überschreitet. Zu den verfügbaren Werten gehören: sichtbar: Der Inhalt ist sichtbar, der Überlaufcontainer ist ausgeblendet: Der Überlaufinhalt wird abgeschnitten Die Bildlaufleiste wird angezeigt, um den Überlaufinhalt anzuzeigen. Automatisch: Der Browser bestimmt automatisch, ob die Bildlaufleiste angezeigt werden soll. Vererben: Das Überlaufattribut des übergeordneten Elements erben

Kümmert sich niemand um Douyins Zufallskonten? Kann ich ein zweites Mal Berufung einlegen? Kümmert sich niemand um Douyins Zufallskonten? Kann ich ein zweites Mal Berufung einlegen? May 03, 2024 am 09:37 AM

Als weltbekannte Kurzvideoplattform verfügt Douyin über eine riesige Nutzerbasis und Content-Ersteller. Da die Plattformregeln jedoch ständig aktualisiert und verbessert werden, kann es bei einigen Benutzern zu Kontosperrungen kommen. Dies hat in der Öffentlichkeit Fragen zur Transparenz und Fairness der Plattformverwaltung aufgeworfen. In diesem Artikel geht es um die Sperrung von Douyin-Konten und um die Frage, ob Benutzer nach der Sperrung ihrer Konten Einspruch einlegen können. Es kann viele Gründe für ein Verbot auf der Douyin-Plattform geben, unter anderem illegale Inhalte, Verstöße gegen Plattformbestimmungen, Verletzung der Rechte anderer Personen usw. Um die Ordnung der Plattform und die Interessen der Nutzer aufrechtzuerhalten, hat Douyin eine Reihe von Regeln und Überprüfungsmechanismen eingerichtet. Wenn einige Benutzer gegen die Regeln verstoßen, werden ihre Konten möglicherweise gesperrt. Einige Benutzer stellen jedoch möglicherweise die Gründe für das Verbot in Frage oder sind mit ihnen unzufrieden

See all articles