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

6
我将使用Node.js压缩一些文件,并将它们的原始字节数组输出到文件中。例如: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本地或使用包将文件转换为字节数组?


也许你想检查一下我的编辑,它提供了一种简单快捷的方式来创建一个字节数组。 - EMX
2个回答

13

我认为这可以达到你想要的效果,尽管有点不太规范。

顺便提一下: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)

2

示例:

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 ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接