65,210
社区成员
发帖
与我相关
我的任务
分享//将字节流用16进制字符表示
CString CKeytestDlg::BYTE2CString1(BYTE *bValue, int iLength)
{
CString sReturn;
int i;
BYTE bHigh = 0;
BYTE bLow = 0;
for (i =1; i <= iLength; i++)
{
//将一个8位字节右移4位取高4位
bHigh = bValue[i-1] >> 4;
//进制只是表示形式,而机器内部存储和计算都是二进制形式
//bHigh < 10 和 bHigh < 0xA是一样的.
//下面这条语句的目的是判断高4位是否小于10,如果小于就
//表示成'0'-'9'
if ( bHigh < 10)
{
bHigh = bHigh + '0';
}
//如果大于10,就表示成'a'-'f'的形式
else
{
bHigh += ('a'-10);
}
sReturn.Insert ((i-1)*2, bHigh);
//将一个8位字节取低4位
bLow = bValue[i-1] & 0x0F;
if ( bLow < 10)
{
bLow = bLow + '0';
}
else
{
bLow += ('a'-10);
}
sReturn.Insert((i-1) * 2 +1, bLow);
}
return sReturn;
}
请大家帮忙看看下面这个程序段的作用?还有bHigh是多少进制,if...else...那里的 为什么用bHigh < 10做约束条件?
CString CKeytestDlg::BYTE2CString1(BYTE *bValue, int iLength)
{
CString sReturn;
int i;
BYTE bHigh = 0;
BYTE bLow = 0;
for (i =1; i <= iLength; i++)
{
bHigh = bValue[i-1] >> 4;
if ( bHigh < 10)
{
bHigh = bHigh + '0';
}
else
{
bHigh += ('a'-10);
}
sReturn.Insert ((i-1)*2, bHigh);
bLow = bValue[i-1] & 0x0F;
if ( bLow < 10)
{
bLow = bLow + '0';
}
else
{
bLow += ('a'-10);
}
sReturn.Insert((i-1) * 2 +1, bLow);
}
return sReturn;
}
作用:
CString CKeytestDlg::BYTE2CString1(BYTE *bValue, int iLength)
将长度为iLength的bValue数组转换为Cstring类型!(十六进制)
if...else...那里的 为什么用bHigh < 10做约束条件?
因为是十六进制@!
大于10的时候,要分开处理
10---a
11---b
.
.
.
bHigh = bValue[i-1] >> 4;
bLow = bValue[i-1] & 0x0F;