nodejs 怎么按字节打印 数值?
发布于 8 年前 作者 yakczh 4312 次浏览 来自 问答

就象Buffer那种效果,

str='中文ABCD1234。。。'   // 文件用gb2313保存 
var buf=new Buffer(str);
console.log(buf);

<Buffer d6 d0 ce c4 41 42 43 31 32 33 34 35> 但是buffer只会打印一部分,多余的不显示

试了一下encodeURIComponent / String.charCodeAt 这个是按char是按多字节算1个 比如 “中文ABCD1234” 的长度是10
encodeURIComponent只有在文件编码是utf8 的时候结果是一致的 如果数据是 gbk编码就 跟buffer输出结果不一样

8 回复

buf.toString(“hex”)

@zbinlin ---------- Capture Output ----------

这样跟 encodeURIComponent 结果是一样的 efbfbdefbfbdefbfbdefbfbd4142434431323334efbfbdefbfbdefbfbdefbfbdefbfbdefbfbd

这个问题我回答过一次。仔细看文档,Buffer有个参数可以控制检视长度。

const buffer = require('buffer')
buffer.INSPECT_MAX_BYTES = 10000
let buf = Buffer.from('asldfjalsdfjlasdjflkasjdflasdflkjaslkdfjkalsdjfklasdjflkasdjfa')
console.log(buf)

@liujavamail 除了buffer buffer.INSPECT_MAX_BYTES = 10000 这种 还有其他方法吗?

@yakczh 你代码是怎么写的?

@zbinlin

var crypto=require('crypto');
var fs=require('fs');

var arr=[0x0,0x0,0x4d,0x67,0x0,0x0,0xa,0x28,0x5a,0x73,0xde,0x69,0x57,0xdc,0x4a,0x85];
const srcdata = new Buffer(arr, 'binary');
var md5= crypto.createHash('md5').update(srcdata).digest('hex');
console.log(md5)


fs.writeFileSync('md5',srcdata, 'binary');

var data=fs.readFileSync('md5', 'binary');
 
 md5= crypto.createHash('md5').update(data).digest('hex');
 console.log(md5)

这个arr是模拟的,实际上是从网络传送过来的

你这里有问题:

fs.writeFileSync('md5',srcdata, 'binary');

// data 是一个字符串
var data=fs.readFileSync('md5', 'binary');

// 这里调用 update 时,由于 data 是字符串,而 update 需要的是一个 Buffer(上面那个 update 的参数是 Buffer 了,就无需进行转换)
// 因此这里需要将字符串自动转换成 Buffer,而由于这里没有指定编码,这此默认使用 utf8 编码。
// 所有这里使用 utf8 编码转换,会导致与上面 ary 转成的 Buffer 不一样了。
// 这里,你可以在 update 里指定编码,或上面 readFileSync 时去掉编码。
 md5= crypto.createHash('md5').update(data).digest('hex');
 console.log(md5)
回到顶部