Node.js 将(ASN.1)BCD值转换为人类可读的字符串
嗨,我有一个十六进制值,它是通过解码CDR文件生成的,其中属性类型是八位字符串数据类型(ANS.1语法)。我想将BCD(十六进制字符串)转换/解释为人类可读的字符串值 下面是使用MARBEN ASN.1 cdr转换器解码的cdr文件的输出Node.js 将(ASN.1)BCD值转换为人类可读的字符串,node.js,converter,asn.1,Node.js,Converter,Asn.1,嗨,我有一个十六进制值,它是通过解码CDR文件生成的,其中属性类型是八位字符串数据类型(ANS.1语法)。我想将BCD(十六进制字符串)转换/解释为人类可读的字符串值 下面是使用MARBEN ASN.1 cdr转换器解码的cdr文件的输出 <?xml version="1.0" encoding="UTF-8"?> <CallEventRecord> <pGWRecord> <recordType>85</recordTyp
<?xml version="1.0" encoding="UTF-8"?>
<CallEventRecord>
<pGWRecord>
<recordType>85</recordType>
<servedIMSI>15650000000010F5</servedIMSI>
<pGWAddress>
<iPBinaryAddress>
<iPBinV4Address>674B8802</iPBinV4Address>
</iPBinaryAddress>
</pGWAddress>
<chargingID>10932225</chargingID>
<servingNodeAddress>
<iPBinaryAddress>
<iPBinV4Address>674B8802</iPBinV4Address>
</iPBinaryAddress>
</servingNodeAddress>
<accessPointNameNI>test.be.ph</accessPointNameNI>
<pdpPDNType>0001</pdpPDNType>
<servedPDPPDNAddress>
<iPAddress>
<iPBinaryAddress>
<iPBinV4Address>0A010505</iPBinV4Address>
</iPBinaryAddress>
</iPAddress>
</servedPDPPDNAddress>
<dynamicAddressFlag>
<true />
</dynamicAddressFlag>
<listOfTrafficVolumes>
<ChangeOfCharCondition>
<dataVolumeGPRSUplink>775838</dataVolumeGPRSUplink>
<dataVolumeGPRSDownlink>1321848</dataVolumeGPRSDownlink>
<changeCondition>
<recordClosure />
</changeCondition>
<changeTime>1705161557142B0800</changeTime>
</ChangeOfCharCondition>
</listOfTrafficVolumes>
<recordOpeningTime>1705161547452B0800</recordOpeningTime>
<duration>569</duration>
<causeForRecClosing>16</causeForRecClosing>
<recordSequenceNumber>36</recordSequenceNumber>
<nodeID>isp.com</nodeID>
<localSequenceNumber>1000035</localSequenceNumber>
<apnSelectionMode>
<mSorNetworkProvidedSubscriptionVerified />
</apnSelectionMode>
<servedMSISDN>368909000032</servedMSISDN>
<chargingCharacteristics>0800</chargingCharacteristics>
<chChSelectionMode>
<servingNodeSupplied />
</chChSelectionMode>
<servingNodePLMNIdentifier>15F506</servingNodePLMNIdentifier>
<rATType>6</rATType>
<mSTimeZone>2300</mSTimeZone>
<userLocationInformation>1815F506000115F5060F424100</userLocationInformation>
<servingNodeType>
<ServingNodeType>
<gTPSGW />
</ServingNodeType>
</servingNodeType>
</pGWRecord>
</CallEventRecord>
任何帮助都将不胜感激。不知道您在哪里遇到困难。IP可以拆分为字节,每个字节显示为十进制数(例如0x67->103);IMSI需要一些半字节交换,但从规范中的注释中可以清楚地看到编码。谢谢@Henry。我能够转换TBCD-STRING字段以及IPBINV4地址。但是我在转换普通的八位字节字符串时遇到困难。与ASN1定义类似,userLocationInformation八进制字符串可选,其中它的样本原始值为
1815F50600115F5060F421100
,实际值为MCC:515 MNC:60 TAC:0x0001 MCC:515 MNC:60 ECI:0xF42410
。我试着将每个字节转换为18 15 F5。。。转换为ASCII,但无法获取实际值。我遗漏了什么吗?ASN.1中的八位字节字符串只是二进制数据。如果您没有关于该结构的更多信息(如TBCD-STRING的注释),您可以尝试进行反向工程。e、 g.ECI明显位于字符串的末尾。
IPBinV4Address ::= OCTET STRING (SIZE(4))
IMSI ::= TBCD-STRING (SIZE (3..8))
TBCD-STRING ::= OCTET STRING
-- This type (Telephony Binary Coded Decimal String) is used to
-- represent several digits from 0 through 9, *, #, a, b, c, two
-- digits per octet, each digit encoded 0000 to 1001 (0 to 9),
-- 1010 (*), 1011 (#), 1100 (a), 1101 (b) or 1110 (c); 1111 used
-- as filler when there is an odd number of digits.
-- bits 8765 of octet n encoding digit 2n
-- bits 4321 of octet n encoding digit 2(n-1) +1