CNode

nodejs 怎么按字节打印 数值?

问答
Yyakczh发布于10 年前最后回复10 年前8 回复4811 浏览0 收藏

就象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)

Z
zbinlin#1·10 年前

你这里有问题:

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)
Z
zbinlin#2·10 年前

buf.toString("hex")

Y
yakczh#3·10 年前
引用 zbinlinbuf.toString("hex")

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

这样跟 encodeURIComponent 结果是一样的 efbfbdefbfbdefbfbdefbfbd4142434431323334efbfbdefbfbdefbfbdefbfbdefbfbdefbfbd

M
myy#4·10 年前

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

L
liujavamail#5·10 年前
const buffer = require('buffer')
buffer.INSPECT_MAX_BYTES = 10000
let buf = Buffer.from('asldfjalsdfjlasdjflkasjdflasdflkjaslkdfjkalsdjfklasdjflkasdjfa')
console.log(buf)
Y
yakczh#6·10 年前
引用 liujavamail

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

Y
yakczh#8·10 年前
引用 zbinlin@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是模拟的,实际上是从网络传送过来的

参与回复
登录后即可参与回复。登录