×
Namespaces

Variants
Actions

导出描述符的十六进制内存映像

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
chengkai 在 17 Jan 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

Symbian中的描述符不仅可以存储字符串还可以存储二进制数据,对于存储字符串的情况下我们可以很方面的打印输出。可是当描述符存储二进制数据的时候就不太容易得知其存储内容,当然我们可以通过单步调试的方式监视描述符里面的内容,可是对于比较大的数据块分析调试起来很不方面。我们可以把描述符的内存映像通过十六进制的ASCII码序列表示出来,然后输出到屏幕或日志文件中进行分析调试。以下代码用于把描述符的内存映像转换成十六进制的ASCII码序列。

Contents

实现代码

StringUtil.h

//导出8位描述符的内存映像
static TPtr8 HexDumpC(const TDesC8 & aData);
//导出16位描述符的内存映像
static TPtr8 HexDumpC(const TDesC & aData);


StringUtil.cpp

TPtr8 StringUtil::HexDumpC(const TDesC8 & aData)
{
HBufC8 *buffer = HBufC8::NewLC(aData.Length()*2);
TPtr8 buffPtr = buffer->Des();
TInt maxLen = buffPtr.MaxLength();
for (TInt i = 0; i < aData.Length(); i++)
{
if(aData[i] >= 0 && aData[i] <= 9)
{
buffPtr.Append('0');
buffPtr.Append(aData[i]+ '0');
} else if(aData[i] >= 0x0a && aData[i] <= 0x0f)
{
buffPtr.Append('0');
buffPtr.Append(aData[i] -10 + 'a');
} else
{
TInt tmp;
tmp = aData[i] /16;
if(tmp >= 0 && tmp <=9 )
{
buffPtr.Append(tmp + '0');
}else if(tmp >= 0x0a && tmp <= 0x0f)
{
buffPtr.Append(tmp -10 + 'a');
}
tmp = aData[i] % 16;
if(tmp >= 0 && tmp <=9 )
{
buffPtr.Append(tmp + '0');
}else if(tmp >= 0x0a && tmp <= 0x0f)
{
buffPtr.Append(tmp -10 + 'a');
}
}
}
return buffPtr;
 
}
 
TPtr8 StringUtil::HexDumpC(const TDesC16 & aData)
{
HBufC8 *buffer = HBufC8::NewL(aData.Size());
TPtr8 buffPtr = buffer->Des();
const TUint8 *p = (TUint8*)&aData[0];
for (TInt i = 0; i < aData.Size(); i++)
{
buffPtr.Append(p++,1);
}
TPtr8 bufferPtr = HexDumpC(buffer->Des());
delete buffer;
return bufferPtr;
}

测试代码

8位描述符

TPtr8 buff = StringUtil::HexDumpC(_L8("123456"));
//output to logfile
//LOG->WriteL(buff);
CleanupStack::PopAndDestroy();

输出结果:

313233343536


16位描述符

TPtr8 buff = StringUtil::HexDumpC(_L("123456"));
//output to logfile
//LOG->WriteL(buff);
CleanupStack::PopAndDestroy();

输出结果:

310032003300340035003600

在此我们可以看出16位描述的ASCII码UNICODE编码形式,并且发现其字节顺序是little-endian(低位在前高位在后)。

This page was last modified on 15 December 2011, at 09:43.
62 page views in the last 30 days.
×