代码如下:
const CRSAPublicKey& iRSAPublicKey = mRSAKeyPair->PublicKey();
const TInteger& e = iRSAPublicKey.E();
HBufC8* exponent8 = e.BufferLC(); //failed to get the right result,it's garbled
TInt ei = e.ConvertToLongL(); //converted successfully,ei=65537
任何人都可以告诉我为什么BufferLC()不起作用?重要的是我错过了什么?,以及如何将TInterger转换为描述符? 提前谢谢。
答案 0 :(得分:0)
不是乱码,只是整数的二进制表示as stated in the documentation。与字节0x33
相同的方式是ASCII 3
的二进制表示。
我假设你想要一些可打印的TInteger
。对于TInteger
为真的小IsConvertableToLong()
,您可以使用ConvertToLong()
方法与TDes::AppendNum()
重载之一。对于更大的整数,我认为你需要推出自己的转换函数。最直接的方法可能只是将二进制表示字节输出为十六进制。
编辑添加:这是一个未经测试的代码片段,用于执行十六进制转换。
HBufC8 *bin = theTInteger.BufferLC();
// One binary byte yields two hex bytes
HBufC8 *output = HBufC8::NewL(bin->Length()*2);
TPtr8 outP = output->Des();
// Loop through the binary bytes
for (int i = 0; i < bin->Length(); ++i) {
TUint8 const KHex[] = "01234567890abcdef";
TUint8 binByte = (*bin)[i];
// Output high nibble (4 bits)
outP.Append(KHex[(binByte & 0xf0) >> 4]);
// Output low nibble
outP.Append(KHex[binByte & 0x0f]);
}
CleanupStack::PopAndDestroy(bin);