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

做项目的时候遇见了两个问题:

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下的时间了。 } 

你可能感兴趣的:(项目中遇见的问题总结:进制转换和时间转换)