Envío y recibo paquetes con la ayuda de los búferes de Node.JS, pero no estoy seguro de cómo convertir estos búferes en una representación binaria. Intenté esto pero no funcionó
let buff = Buffer.alloc(10); buff[0] = 10; buff[1] = 16; buff[2] = 20; buff[3] = 32; buff[4] = 9; console.log(buff); console.log(buff.toString('binary'));Según la documentación 'binary' es un alias para 'latin1'
Si desea una representación binaria, la forma más fácil de obtener una representación de cadena del búfer con solo 1 y 0 es convertir el búfer a hexadecimal su representación, luego analizar esta representación en BigInt, obtener la base 2 de BigInt y finalmente rellenar la cadena con ceros no significativos
function buf2bin (buffer) { return BigInt('0x' + buffer.toString('hex')).toString(2).padStart(buffer.length * 8, '0') }Si lo que está preguntando es que desea una representación de cadena (expresada en binario) de cada byte separado en el búfer, todo combinado en una cadena con separadores de espacio para cada byte, entonces puede hacerlo así:
function convertBufferToBinaryString(buf, len) { let result = []; for (let i = 0; i < len; i++) { result.unshift(buf[i].toString(2).padStart(8, "0")); } return result.join(" "); } // sample usage let buff = Buffer.alloc(10); buff[0] = 10; buff[1] = 16; buff[2] = 20; buff[3] = 32; buff[4] = 9; let str = convertBufferToBinaryString(buff, 5); console.log(str); Dado que este es un formato de salida personalizado, no hay una forma integrada de hacerlo. Puede convertir cualquier número único en una representación de cadena binaria usando .toString(2) , pero para combinar la representación de cadena binaria de cada byte separado en el búfer, tendría que crear ese resultado combinado usted mismo (como se muestra arriba).
Nota: esta implementación asume que desea el elemento [0] del búfer en el extremo derecho de la cadena de resultados. Es por eso que usa .unshift() al construir la matriz de resultados. Si desea el elemento [0] en el extremo izquierdo de la cadena, utilice .push() en su lugar.
Simple reduce a cadena con combinación padStart .
const buff = Buffer.alloc(10); buff[0] = 10; buff[1] = 16; buff[2] = 20; buff[3] = 32; buff[4] = 9; const paddedBinString = buff.reduce( (acc, byte) => (acc += byte.toString(2).padStart(8, "0")), "" ); console.log(paddedBinString); // 00001010 00010000 00010100 00100000 00001001 00000000 00000000 00000000 00000000 00000000