【发布时间】:2020-01-21 14:20:59
【问题描述】:
我想将节点 JS 缓冲区转换为十六进制字符串。显然,我先用谷歌搜索了这个,但建议的解决方案都不起作用。
例如,在this question 中,接受的答案下方的评论说您应该这样做:
let signature4 = Buffer.from(signature3.r, 'hex') + Buffer.from(signature3.s, 'hex') + Buffer.from(signature3.v, 'hex');
但这会产生:
TypeError [ERR_INVALID_ARG_TYPE]: The "value" argument must not be of type number. Received type number
如果我去找告诉我这样做的实际答案:
let signature4 = signature3.r.toString('hex') + signature3.s.toString('hex') + signature3.v.toString('hex');
我收到此错误:
RangeError: toString() radix argument must be between 2 and 36
如果我按照错误消息中给出的建议输入 16 作为数字,如下所示:
let signature4 = signature3.r.toString(16) + signature3.s.toString(16) + signature3.v.toString(16);
我收到此错误消息:
TypeError [ERR_UNKNOWN_ENCODING]: Unknown encoding: 16
如果我改为将 16 作为字符串传递:
let signature4 = signature3.r.toString('16') + signature3.s.toString('16') + signature3.v.toString('16');
我收到同样的错误信息:
TypeError [ERR_UNKNOWN_ENCODING]: Unknown encoding: 16
那么目前的做法是什么?
我使用 Node v10.18.1。
【问题讨论】: