为什么不能将Symbian CRSAPublicKey转换为描述符?

时间:2010-11-08 07:19:19

标签: symbian

代码如下:

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转换为描述符? 提前谢谢。

1 个答案:

答案 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);