如何将十六进制Hedera账户ID别名转为纯字符格式?Hedera SDK是否支持?
将十六进制Hedera账户ID别名转换为Base58字符格式
Hedera官方SDK已经内置了实现该转换的工具函数,无需手动编码Base58逻辑。本质上,你要转换的是DER编码公钥的十六进制字符串到账户别名的Base58格式,以下是主流SDK的具体实现方式:
JavaScript/TypeScript SDK(@hashgraph/sdk)
import { AccountId, PublicKey } from "@hashgraph/sdk"; // 提取十六进制别名部分(去掉0.0.前缀) const hexAlias = "302a300506032b657003210030a028ee7fd716c438de818a8831ed2235d0f85e430ab036dbfac173eb50aef9"; // 解析为公钥并转换为账户别名ID const publicKey = PublicKey.fromBytes(Buffer.from(hexAlias, "hex")); const accountId = AccountId.fromPublicKey(publicKey); // 输出目标格式 console.log(accountId.toString()); // 结果:0.0.HIQQEXWKW53RKN4W6XXC4Q232SYNZ3SZANVZZSUME5B5PRGXL663UAQA
Java SDK(com.hedera.hashgraph:sdk)
import com.hedera.hashgraph.sdk.AccountId; import com.hedera.hashgraph.sdk.PublicKey; import java.util.HexFormat; public class AccountAliasConverter { public static void main(String[] args) { String hexAlias = "302a300506032b657003210030a028ee7fd716c438de818a8831ed2235d0f85e430ab036dbfac173eb50aef9"; byte[] publicKeyBytes = HexFormat.of().parseHex(hexAlias); PublicKey publicKey = PublicKey.fromBytes(publicKeyBytes); AccountId accountId = AccountId.fromPublicKey(publicKey); System.out.println(accountId.toString()); // 结果:0.0.HIQQEXWKW53RKN4W6XXC4Q232SYNZ3SZANVZZSUME5B5PRGXL663UAQA } }
Go SDK(github.com/hashgraph/hedera-sdk-go/v2)
package main import ( "encoding/hex" "fmt" "github.com/hashgraph/hedera-sdk-go/v2" ) func main() { hexAlias := "302a300506032b657003210030a028ee7fd716c438de818a8831ed2235d0f85e430ab036dbfac173eb50aef9" publicKeyBytes, _ := hex.DecodeString(hexAlias) publicKey, _ := hedera.PublicKeyFromBytes(publicKeyBytes) accountId := hedera.AccountIDFromPublicKey(publicKey) fmt.Println(accountId.String()) // 结果:0.0.HIQQEXWKW53RKN4W6XXC4Q232SYNZ3SZANVZZSUME5B5PRGXL663UAQA }
补充说明
如果你的输入是完整的0.0.<十六进制字符串>格式,可先通过字符串分割提取出后面的十六进制部分再处理,比如在JavaScript中用hexAlias = fullAccountId.split('.')[2]。
内容的提问来源于stack exchange,提问作者Pathorn Teng
相关产品推荐
相关产品推荐

