【问题标题】:Converting a buffer to a hex string将缓冲区转换为十六进制字符串
【发布时间】: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。

【问题讨论】:

    标签: node.js hex buffer


    【解决方案1】:

    这对我有用...您的对象实际上是 Node.js 缓冲区吗?

    Buffer.from([255,254,0,1]).toString("hex") // ffee0001
    

    【讨论】:

    • 该死,我现在觉得自己很蠢。不应该将所有这些都写在一行中。 rs 值是缓冲区,但 v 不是。 v 是一个数字。所以我需要将'hex' 传递给rstoString(),但我需要将16 传递给vtoString
    • 发生在我们最好的人身上:)
    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 2016-10-15
    • 2012-02-20
    • 2018-01-31
    • 2018-01-22
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多