同步读取文件并转换为字节数组

时间:2017-08-21 18:20:16

标签: javascript arrays node.js hex byte

我使用Node.js gzip一些文件并将其原始字节数组输出到文件中。

例如:

的test.txt:

1234
  

text.txt> test.txt.gz

     

test.txt.gz到字节数组> array.txt

array.txt:

{0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e}


我似乎无法找到有关将文件转换为字节数组或任何npm包的任何其他问题。我试图手动fs.readFileSync一个文件并在函数中使用它,但由于特殊字符和编码失败。

如何将文件本地转换为Node.js中的字节数组或使用包?

2 个答案:

答案 0 :(得分:3)

我认为这可以实现你想要的东西,虽然有点脏。

仅供参考:fs.readFileSync会返回Buffer个对象,您可以通过Buffer.toString('hex')将其转换为十六进制

var fs = require('fs');

function getByteArray(filePath){
    let fileData = fs.readFileSync(filePath).toString('hex');
    let result = []
    for (var i = 0; i < fileData.length; i+=2)
      result.push('0x'+fileData[i]+''+fileData[i+1])
    return result;
}

result = getByteArray('/path/to/file')
console.log(result)

答案 1 :(得分:1)

示例:

console.log("[string]:")
const _string = 'aeiou.áéíóú.äëïöü.ñ';
console.log(_string)

console.log("\n[buffer]:")
const _buffer = Buffer.from(_string, 'utf8');
console.log(_buffer)

console.log("\n[binaryString]:")
const binaryString = _buffer.toString();
console.log(binaryString)

输出:

[string]:
aeiou.áéíóú.äëïöü.ñ

[buffer]:
<Buffer 61 65 69 6f 75 2e c3 a1 c3 a9 c3 ad c3 b3 c3 ba 2e c3 a4 c3 ab c3 af c3 b6 c3 bc 2e c3 b1>

[binaryString]:
aeiou.áéíóú.äëïöü.ñ

编辑:轻松convert-string

示例:

console.log("[string]:")
const _string = 'aeiou.áéíóú.äëïöü.ñ';
console.log(_string)

console.log("\n[byteArray]:")
const converter = require('convert-string')
const byteArray = converter.UTF8.stringToBytes(_string)
console.log(byteArray)

输出:

[byteArray]:
[ 97,
  101,
  105,
  111,
  117,
  46,
  195,
  161,
  195,
  169,
  195,
  173,
  195,
  179,
  195,
  186,
  46,
  195,
  164,
  195,
  171,
  195,
  175,
  195,
  182,
  195,
  188,
  46,
  195,
  177 ]