Estoy tratando de convertir una cadena de caracteres ASCII en una matriz de bytes.

Problema es que mi código es la conversión de ASCII a una matriz de tipo string y no una matriz de Bytes:

var tx = '[86400:?]';
for (a = 0; a < tx.length; a = a + 1) {
    hex.push('0x'+tx.charCodeAt(a).toString(16));
}

Esto se traduce en:

 [ '0x5b','0x38','0x36','0x30','0x30','0x30','0x3a','0x3f','0x5d' ]

Pero lo que estoy buscando es:

[0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f,0x5d]

¿Cómo puedo convertir de un byte en lugar de una cadena de bytes ?

Esta matriz se transmite a un dispositivo USB:

device.write([0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f,0x5d])

Y tiene que ser enviado como una matriz y no de bucle dispositivo de envío.write() para cada valor de la matriz.

  • 0x5b no es en realidad 0x5b, sino que es una simple int con el valor 91. Guarde estas como un entero (inttx.charCodeAt(a)) en su lugar, y todo va a estar bien.
  • Los números son los números, y siempre son almacenados en formato binario. Si desea que la representación hexadecimal, tienda de una cadena de texto (como ahora), o el uso hex.push(tx.charCodeAt(a));, que almacenará los códigos ASCII, y el uso .toString(16) para convertir a hexadecimal durante la impresión.
  • posibles duplicados de JavaScript Conversión de los valores de cadena en hexadecimal
InformationsquelleAutor crankshaft | 2013-06-03

1 Comentario

  1. 12

    Una sola línea :

       '[86400:?]'.split ('').map (function (c) { return c.charCodeAt (0); })

    devuelve

        [91, 56, 54, 52, 48, 48, 58, 63, 93]

    Esto es, por supuesto, es una matriz de números, no es estrictamente una «matriz de bytes». ¿Que significa realmente una «matriz de bytes»?

    Dividir la cadena en caracteres individuales, a continuación, asignar a cada personaje con su código numérico.

    Por su mayor información acerca de device.write he encontrado esto :

    Escrito a un dispositivo

    Escrito a un dispositivo se realiza mediante la llamada de escritura en un dispositivo
    la manija. Toda la escritura es sincrónico.

    dispositivo.escribir([0x00, 0x01, 0x01, 0x05, 0xff, 0xff]);

    sobre https://npmjs.org/package/node-hid

    Suponiendo que esto es lo que usted está utilizando, a continuación, mi matriz anterior funcionaría perfectamente bien :

    device.write('[86400:?]'.split ('').map (function (c) { return c.charCodeAt (0); }));

    Como ha señalado el 0x notación es sólo eso, una notación. Si especifica 0x0a o 10 o 012 (en octal) el valor es el mismo.

    • Gracias, sí que tiene que ser un Hex matriz de bytes como el de salida se transmite a un dispositivo usb: el dispositivo.escribir([0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f,0x5d]). Así que realmente necesitan una manera de crear un hex-matriz de bytes !
    • una «matriz de bytes» no es «hex», es a menudo simplemente presentada en hexadecimal.
    • Lo que el entorno está en ejecución? node.js ?
    • Excelente, gracias, sí lo es node.js y su googlear fue correcto es el uso de un nodo-hid. Después de algunas pruebas más, ahora entiendo que no es necesario enviar el array en formato hexadecimal, por lo que su solución funciona. Gracias de nuevo.

Dejar respuesta

Please enter your comment!
Please enter your name here