String/byte-Array zu Integer-Array

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Im Moment stehe ich grad auf dem Schlauch, wie ich aus einem String, welcher gemäß Shelly-API-Doc einfach ein Byte-Array ist, Integers (oder Numbers) kriege. Die üblichen verdächtigen JS-Funktionen auf String scheinen dafür zu fehlen. Was geht, ist eine HEX-Darstellung zu kriegen:

    Code
    function init() {
    	let testString="\x00190aZ\xFF"
    	for(i=0;i<testString.length;i++) {
    		let char = testString.charAt(i);
    		let num = btoh(char);
    		print("Character: '"+char+"' Number: '"+num+"'");
    	}
    }
    init();

    Das ergibt:

    Code
    Character: '' Number: '00'
    Character: '1' Number: '31'
    Character: '9' Number: '39'
    Character: '0' Number: '30'	
    Character: 'a' Number: '61'
    Character: 'Z' Number: '5a'
    Character: '�' Number: 'ff'

    Das ist schon mal nicht schlecht, aber ich will ja gar keine HEX-String-Repräsentationen von meinen Zahlen, sondern echte JS-"Number"-Instanzen. Eine Funktion 'btoi' oder 'bton' oder dergleichen, welche eine Number als Rückgabewert hat. Aktuell bleibt alles immer ein String.

    Und wie ich das nun geschrieben habe, ist mir doch noch eine krude Lösung eingefallen:

    Code
    function init() {
    	let testString="\x00190aZ\xFF"
    	for(i=0;i<testString.length;i++) {
    		let char = testString.charAt(i);
    		let num = btoh(char);
    		print("Character: '"+char+"' Number: '"+Number("0x"+num)+"'");
    	}
    }
    init();

    gibt:

    Code
    Character: '' Number: '0'
    Character: '1' Number: '49'
    Character: '9' Number: '57'
    Character: '0' Number: '48'
    Character: 'a' Number: '97'
    Character: 'Z' Number: '90'
    Character: '�' Number: '255'

    Also genau das, was ich will. Aber vielleicht kennt jemand noch eine elegantere Lösung?

  • Die charCodeAt() Methode gibt direkt den Wert eines Zeichens als Integer zurück. Kombiniert mit einer for...of Loop könnte man das dann z. B. so formulieren:

    JavaScript
    let testString="\x00190aZ\xFF";
    
    for (let char of testString) { 
      print("Character: ", char, "Number: ", char.charCodeAt(0)); 
    };

    Das produziert den gleichen Output wie deine Version und ist etwas kürzer...

    Einmal editiert, zuletzt von towiat (12. Januar 2025 um 01:45)

  • Ah, das war eigentlich das Erste, was ich ausprobiert hatte. Das hatte immer Fehler produziert. Da hatte ich wohl noch einen Bug drin, jetzt geht's. Herzlichen Dank!