Di que tengo una cuerda
"020000009B020000C0060000"y quiero convertirlo en una cadena de tal manera que si se guardó como un archivo y lo abrió en un editor hexadecimal, mostraría el mismo hexadecimal que ingresé. ¿Cómo hago esto? Nunca he tenido que usar buffers ni nada, pero al tratar de hacer esto aparentemente tuve que hacerlo, y realmente no sé lo que estoy haciendo.
(o si debería usar búferes en absoluto; he estado buscando durante horas y todo lo que puedo encontrar son respuestas que usan búferes, así que solo tomé sus ejemplos y, sin embargo, nada funciona)
Convertí la cadena hexadecimal en un búfer
function hexToBuffer(hex) { let typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })) return typedArray } y esto pareció funcionar porque registrar hexToBuffer("020000009B020000C0060000").buffer lo que devuelve me dio esto:
ArrayBuffer { [Uint8Contents]: <02 00 00 00 9b 02 00 00 c0 06 00 00>, byteLength: 12 }que tiene el mismo hexadecimal que puse, por lo que parece estar funcionando bien, luego para convertir el búfer de matriz en una cadena, hice esto.
let dataView = new DataView(buffer); let decoder = new TextDecoder('utf-8'); let string = decoder.decode(dataView)solo para probar que funcionó, lo guardé en un archivo.
fs.writeFileSync(__dirname+'/test.txt', string) Al abrir test.txt en un editor hexadecimal, se muestran diferentes datos: 02000000EFBFBD020000EFBFBD060000
Si en cambio hago
fs.writeFileSync(__dirname+'/test.txt', hexToBuffer("020000009B020000C0060000"))luego obtengo los datos correctos, pero luego, si leo el archivo con fs y luego lo agrego, una vez más no son los mismos valores.
let test = fs.readFileSync(__dirname+'/test.txt', 'utf8) let example2 = test+'example' fs.writeFileSync(__dirname+'/test.txt', example2) ahora test.txt comienza con 02000000EFBFBD020000EFBFBD060000 en lugar de 020000009B020000C0060000 . ¿Qué debo hacer?
En primer lugar, puede utilizar el Buffer.from(string[, encoding]) para crear un búfer a partir de una cadena y, al mismo tiempo, especificar la codificación; en su caso, será "hex" :
const b1 = Buffer.from("020000009B020000C0060000", "hex")Ahora guárdelo en un archivo:
fs.writeFileSync(path.resolve('./test'), b1) Luego podemos verificar que el archivo contiene los mismos valores hexadecimales que en la cadena usando xxd en la línea de comando:
$ xxd test 0200 0000 9b02 0000 c006 0000¡Luciendo bien!
Ahora también podemos volver a leer el archivo en un búfer, asegurándonos de decirle que la codificación del archivo es "hex" nuevamente:
const b2 = fs.readFileSync(path.resolve("./test"), "hex")Finalmente, vuelva a convertirlo en una cadena con el método Buffer.toString():
console.log(b2.toString()) // => "020000009b020000c0060000"