关于 “更新版本” 的一个程序段,请前辈指教

wendy_welcom 2008-01-23 05:39:59
UCHAR filever; /* file version */

prg_version.data[0] = 0x20; /* reserve */
prg_version.data[1] = 0x20; /* reserve */
prg_version.data[2] = (Va_flheader[slotno - 1].filever + 0x30);
prg_version.data[3] = '.';

hund = (Va_mlpr_flheader[slotno - 1].filerev / 100);
dec = ((Va_mlpr_flheader[slotno - 1].filerev - hund * 100) / 10);
rest = ((Va_mlpr_flheader[slotno - 1].filerev - hund * 100) % 10);
prg_version.data[4] = (hund + 0x30);
prg_version.data[5] = (dec + 0x30);
prg_version.data[6] = (rest + 0x30);
prg_version.data[7] = 0x20; /* reserve*/

这是项目里一段关于更新文件版本的代码, 但我没看懂, 请问那个0x30 是怎么回事啊?为什么要加上 0x30? 谢谢啦。
...全文
105 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wendy_welcom 2008-01-28
  • 打赏
  • 举报
回复
但是Va_flheader[slotno - 1].filever 本来就是无符号Char型, Char型,不就是一个字符么?字符再变字符??
wendy_welcom 2008-01-24
  • 打赏
  • 举报
回复
4楼说:
如果是 int 型的 1 即 0x01 , 加 0x30后变成 0x31 就成了 '1'了

但是Va_flheader[slotno - 1].filever 本来就是无符号Char型, Char型,不就是一个字符么?字符再变字符??
wendy_welcom 2008-01-24
  • 打赏
  • 举报
回复

可是下面这句又怎么解释呢?
hund = (Va_mlpr_flheader[slotno - 1].filerev / 100);

更正一下:
prg_version.data[2] = (Va_flheader[slotno - 1].filever + 0x30);
这句写错了,因该是(Va_mlpr_flheader[slotno - 1].filever + 0x30);

如果是把一个数字变成字符型的,那么Va_mlpr_flheader[slotno - 1].filever 的取值应该是0到9的数字是么?
假设它的值取1
hund = 1/100 那他得值就是0了吧?

这样看来最后的结果应该是_ _ 1.001_ / _2.002_ / _3.003_ 这样的版本号。可是程序出来的结果是_ _ 1.010_ / _ _ 1.200_ / _ _2.000_ 答案不符阿? (下划线代表空格)

friedchicken2002 2008-01-23
  • 打赏
  • 举报
回复
1 0x31
2 0x32
3 0x33
4 0x34
5 0x35
如果是 int 型的 1 即 0x01 , 加 0x30后变成 0x31 就成了 '1'了
lockhall 2008-01-23
  • 打赏
  • 举报
回复
戒指估计猜的对了。

人才啊。
Treazy 2008-01-23
  • 打赏
  • 举报
回复
我猜加0x30

是将数字变成字符!

下面的继续猜!

/* 不写注释谁知道这鬼东西是什么啊 */
goodmrning 2008-01-23
  • 打赏
  • 举报
回复
关注

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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