将 UInt8Array 转换为字符串
Convert UInt8Array to String
我正在开发一个涉及加密货币的应用程序,我在处理涉及的一些数据的转换时遇到了问题。
我正在使用 bitcoinjs-lib 生成比特币地址。地址创建成功,我的响应对象如下所示:
address: "1Nnn9HpxgykWXxZX5rL3hIH7iikWkQaBSc"
balance: 0
currency: "BTC"
privateKey: Uint8Array(32) [86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]
publicKey: Uint8Array(33) [3, 233, 119, 81, 11, 119, 13, 133, 115, 183, 163, 90, 218, 2, 36, 41, 105, 158, 248, 131, 68, 234, 193, 110, 105, 72, 38, 110, 253, 192, 245, 108, 214]
wif: "Kz8QjBvSPjfRVxazJDwGEGwaoGTjRhFGe1MPsiPZRPpKEpidH7Qf"
我正在使用 IndexedDB 来存储创建的钱包。由于我正在生成不同类型的钱包,我的数据库调用如下所示:
{
date: new Date(),
coinType: crypto,
isHDWallet: true,
derivationPath: null,
publicKey: bytesToString(Buffer.from(wallet.publicKey)) ?? null,
privateKey: bytesToString(Buffer.from(wallet.privateKey)) ?? null,
wif: wallet.wif ?? null,
address: wallet.address ?? null,
balance: wallet.balance ?? null,
secret: wallet.secret ?? null,
user_id: 1
}
我的数据很好地存储在我的数据库中,只是我无法将 UInt8Array 正确地转换为字符串。我几乎尝试了 this post 中的所有方法,但没有成功。
这是我试过的 bytesToString
函数:
function bytesToString (bytes) {
return String.fromCharCode.apply(null, bytes)
}
我尝试使用 Node 的 StringDecoder
模块但没有成功。我也试过使用 Buffer.from(privateKey).toString('utf-8')
.
我了解到比特币地址使用 base 58 编码。我不知道这是否相关。
我没有任何使用缓冲区或类似此类转换类型的经验。任何帮助将不胜感激。
这不是 UTF-8 编码的文本,而是只是 二进制数据。所以你可以忘记链接Q/A,你不是同样的情况。
在这里,您可以自行选择如何对其进行编码,有些人更愿意将其转换为十六进制转储
const arr = new Uint8Array([86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]);
const as_text = Array.from( arr )
.map( (val) => val.toString( 16 ).padStart( 2,"0" ) )
.join(" ");
console.log( as_text );
有些人更喜欢将其存储为 base64:
const arr = new Uint8Array([86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]);
const bin = [];
for (let i = 0; i < arr.length; i++) {
bin.push( String.fromCharCode( arr[ i ] ) );
}
const as_text = btoa( bin.join( "" ) );
console.log( as_text );
有些人可能更喜欢将二进制数据直接存储为 TINYBLOB,尽管我真的不是数据库维护方面的专家。
只是一个二进制数据。如果要将其转换为字符串。我建议你使用 Base64。您可以使用第三方库:https://github.com/dankogai/js-base64 .
Base64.fromUint8Array(arr);
我正在开发一个涉及加密货币的应用程序,我在处理涉及的一些数据的转换时遇到了问题。
我正在使用 bitcoinjs-lib 生成比特币地址。地址创建成功,我的响应对象如下所示:
address: "1Nnn9HpxgykWXxZX5rL3hIH7iikWkQaBSc"
balance: 0
currency: "BTC"
privateKey: Uint8Array(32) [86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]
publicKey: Uint8Array(33) [3, 233, 119, 81, 11, 119, 13, 133, 115, 183, 163, 90, 218, 2, 36, 41, 105, 158, 248, 131, 68, 234, 193, 110, 105, 72, 38, 110, 253, 192, 245, 108, 214]
wif: "Kz8QjBvSPjfRVxazJDwGEGwaoGTjRhFGe1MPsiPZRPpKEpidH7Qf"
我正在使用 IndexedDB 来存储创建的钱包。由于我正在生成不同类型的钱包,我的数据库调用如下所示:
{
date: new Date(),
coinType: crypto,
isHDWallet: true,
derivationPath: null,
publicKey: bytesToString(Buffer.from(wallet.publicKey)) ?? null,
privateKey: bytesToString(Buffer.from(wallet.privateKey)) ?? null,
wif: wallet.wif ?? null,
address: wallet.address ?? null,
balance: wallet.balance ?? null,
secret: wallet.secret ?? null,
user_id: 1
}
我的数据很好地存储在我的数据库中,只是我无法将 UInt8Array 正确地转换为字符串。我几乎尝试了 this post 中的所有方法,但没有成功。
这是我试过的 bytesToString
函数:
function bytesToString (bytes) {
return String.fromCharCode.apply(null, bytes)
}
我尝试使用 Node 的 StringDecoder
模块但没有成功。我也试过使用 Buffer.from(privateKey).toString('utf-8')
.
我了解到比特币地址使用 base 58 编码。我不知道这是否相关。
我没有任何使用缓冲区或类似此类转换类型的经验。任何帮助将不胜感激。
这不是 UTF-8 编码的文本,而是只是 二进制数据。所以你可以忘记链接Q/A,你不是同样的情况。
在这里,您可以自行选择如何对其进行编码,有些人更愿意将其转换为十六进制转储
const arr = new Uint8Array([86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]);
const as_text = Array.from( arr )
.map( (val) => val.toString( 16 ).padStart( 2,"0" ) )
.join(" ");
console.log( as_text );
有些人更喜欢将其存储为 base64:
const arr = new Uint8Array([86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]);
const bin = [];
for (let i = 0; i < arr.length; i++) {
bin.push( String.fromCharCode( arr[ i ] ) );
}
const as_text = btoa( bin.join( "" ) );
console.log( as_text );
有些人可能更喜欢将二进制数据直接存储为 TINYBLOB,尽管我真的不是数据库维护方面的专家。
只是一个二进制数据。如果要将其转换为字符串。我建议你使用 Base64。您可以使用第三方库:https://github.com/dankogai/js-base64 .
Base64.fromUint8Array(arr);