一个简单的才C++问题

yuexp 2008-11-17 09:17:20
请大家帮忙看看下面这个程序段的作用?还有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;
}
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longinc 2008-11-17
  • 打赏
  • 举报
回复
UP
jia_xiaoxin 2008-11-17
  • 打赏
  • 举报
回复
//将字节流用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;
}
cyj626 2008-11-17
  • 打赏
  • 举报
回复
up
楼上正解
太乙 2008-11-17
  • 打赏
  • 举报
回复

请大家帮忙看看下面这个程序段的作用?还有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
.
.
.





就呆在云上 2008-11-17
  • 打赏
  • 举报
回复
程序就是把一个字节序列转化为cstring类型的,其中byte典型的就是char的体现,你可以认为是把一个字符串转化为cstring类型的
而找个字节序是来源于你的键盘的输入吧
键盘输入由两个部分组成,这个要看键盘的编码。
BYTE 就是一个字节撒,一个字节就是8位撒,而里面的
bHigh = bValue[i-1] >> 4;
bLow = bValue[i-1] & 0x0F;

分别去8位字符的高4位和低4位
然后转换
DarknessTM 2008-11-17
  • 打赏
  • 举报
回复
就是把一个一个字节流转换成 字符串表示
这里表示的时候选择了16进制形式

所以10以上的数需要表示为 A B C D E F

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧