您的位置:首页 > 其它

项目中遇见的问题总结:进制转换和时间转换

2010-03-09 09:57 525 查看
做项目的时候遇见了两个问题:

1 十六进制字符串转换为十进制整数

2 Unix下的时间到Symbian时间的转换

解决如下:

1

TInt  HexString2Int(const TDesC & aHexStr)
{
TInt len = aHexStr.Length();
if (len > 8)
return 1;
TInt res = 0;
TInt tmp = 0;
const TUint16 * hexString = aHexStr.Ptr();
for (TInt i = 0; i < len; i++)
{
if (hexString[i] >= '0' && hexString[i] <= '9')
{
tmp = hexString[i] - '0';
}
else if (hexString[i] >= 'a' && hexString[i] <= 'f')
{
tmp = hexString[i] - 'a' + 10;
}
else if (hexString[i] >= 'A' && hexString[i] <= 'F')
{
tmp = hexString[i] - 'A' + 10;
}
else
{
res = 0;
}
tmp <<= ((len - i - 1) << 2);
res |= tmp;
}
return res;
}


使用示例

TInt res = StringUtil::HexString2Int(_L("Ef56"));

SDK提供的TLex类可以实现把16进制字符串转换成整数:

_LIT( KTestHexString, "Ef56" );

TLex lex( KTestHexString );

TUint num(0);

lex.Val( num, EHex );

另外TRadix还可以进行二进制,八进制的转换:

EBinary
Convert number into binary character representation.

EOctal
Convert number into octal character representation.

EDecimal
Convert number into decimal character representation.

EHex
Convert number into hexadecimal character representation

from:http://wiki.forum.nokia.com/index.php/转换十六进制字符串为整数


2

TTime CLogExEngine::GetTime(const TDesC& aData)
{
//////////////////////////
_LIT(KDateString1,"%D%M%Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%.%*C4%:3%+B"); // 定义显示的格式是 年/月/日 时:分:秒.000000
TTime tm;
// 这里传入的1207823088就是unix下面UTC时间的十进制表示
TTimeIntervalSeconds tm_seconds(HexString2Int(aData));
// local是TLocale的对象,这个对象比较大,最好不要在栈上创建,
// 可以做为类的成员变量或者在堆上创建
//	HBufC* local = HBufC::NewL(100);
TLocale local;
TTimeIntervalSeconds tm_offset(local.UniversalTimeOffset());
// 基准时间根据UTC的标准设定为1970/01/01,0点0分0秒。
tm.Set(_L("19700000:000000.000000"));
TBuf<100> iTmpBuf;
tm.FormatL(iTmpBuf, KDateString1);
RDebug::Print(_L("Test string: %S"), &iTmpBuf);
// 根据unix UTC时间的定义,需要在基准时间里面加入距离基准时间的秒数,还要加入时区
// 的偏移,我们是东八区,正好需要加入8个小时
tm += tm_seconds;
tm += tm_offset;
tm.FormatL(iTmpBuf, KDateString1);
RDebug::Print(_L("Test string: %S"), &iTmpBuf);
return tm;
// 此时的tm里面就是我们所需要的symbian下的时间了。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐