经常使用TLex将字符窜转化为数字,不过一般都是10进制的字符窜的转化,TLex还有其他几种的转化方式,
见以下函数:
TInt Val(TUint8 &aVal, TRadix aRadix);
参数aRadix 可以指定为一下几个值:
|
指定为EHex时就可以将16进制字符窜转化为数字。
利用这个方式就可以将16进制表示的颜色值转化为RGB的形式
如下:
TInt CGetPage::ChangeDesToRGB(const TDesC& aColorDes,TRgb & aRgbReturn)
{
HBufC* color = HBufC::New(aColorDes.Length()+2);
if (aColorDes.FindF(_L("#0x"))==0)
{
color->Des().Append(aColorDes.Mid(3));
}
else if (aColorDes.FindF(_L("#"))==0)
{
color->Des().Append(aColorDes.Mid(1));
}
else//有问题
{
delete color;
return KErrNotFound;
}
TLex lex(*color);
TUint result(0);
if (lex.Val( result, EHex )==KErrNone)
{
TRgb newColor(result);
//TInt aa = newColor.Red();
//TInt bb = newColor.Green();
//TInt cc = newColor.Blue();
aRgbReturn.SetRed(newColor.Blue());//这里特别改动的,否则R、B顺序不对
aRgbReturn.SetGreen(newColor.Green());
aRgbReturn.SetBlue(newColor.Red());
delete color;
return KErrNone;
}
else
{
delete color;
return KErrNotFound;
}
}
用法:
TRgb a;
if (ChangeDesToRGB(_L("FF00FF"),a)==KErrNone)
{
a就是最后的颜色值
}