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

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? 谢谢啦。
...全文
74 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
关注
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-01-23 05:39
社区公告
暂无公告