我被提供了这样一个功能
function toHexString(bytes) {
const a = bytes.map(function (byte) {
console.log("--------------------")
const parsedValue = ("00" + (byte & 0xFF).toString(16)).slice(-2)
console.log(parsedValue)
console.log(typeof parsedValue)
console.log("--------------------")
return ("00" + (byte & 0xFF).toString(16)).slice(-2);
});
console.log(a)
}
toHexString(Buffer.from("2241f2", 'hex'))
下面是它的日志响应
--------------------
22
string
--------------------
--------------------
41
string
--------------------
--------------------
f2
string
--------------------
<Buffer 16 29 00>
我真的以为它会在响应中提供给我2241f2
,但它没有。你们能给我解释一下为什么吗?
如果可能的话,你能用一个for循环重新创建它来帮助我更好地理解它吗?
我的try using循环
const a = Buffer.from("2241f2", 'hex')
const b= []
for (let byte of a) {
b.push(("00" + (byte & 0xFF).toString(16)).slice(-2))
}
console.log(b)
结果
[ '22', '41', 'f2' ]
2条答案
按热度按时间goqiplq21#
.map
的结果总是与源类型相同,因此,当您使用Buffer.map
时,它创建的对象也将是Buffer
,并且您从回调返回的所有内容都将转换回底层数据类型,即bytes。您也可以在类型化数组中观察到相同的行为:
要从Map器获取一个常规数组,必须专门调用
Array.map
:或者使用循环:
atmip9wb2#
在Map函数中,您接收'bytes'(在
Buffer
元素的意义上)并返回字符串。但是,您应该保留此处的类型。
变更
到
一切都会好起来的。
如果你的Map涉及到在Map过程中改变元素的数据类型,那么原则上应该是未定义的--事实上,它取决于实现。在node.js运行时中,你可以观察到你描述的行为,this substitute会用你的原始代码产生想要的输出(使用
ethereumjs.Buffer.Buffer
代替Buffer
)。