免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2837 | 回复: 6
打印 上一主题 下一主题

[C] int型转bcd码,出现非常奇怪的错误! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-10 16:16 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>

char hex2bcd(char n)
{
        if ( 0 <= n && n < 100)
                return ((n/10) << 4 + n%10);
        else return 0xff;
}

int voidhex2bcd(int n, char *str)
{
        int i;
        char x;
        char *ptr = str;
        char tmp[10] = {0};
        int m = n;

        for (i = 0; i < sizeof(int); i++)
        {
                //x =*((char *)&m) & 0xff;
                x = m&0x0ff;
                tmp = (m&0xff);
                //tmp &= 0x00ff;
                printf("m%d = %x tmp---[%d]=%x x = %x\n", i, m&0xff,i, tmp,x);
                tmp = tmp%100;
                printf("1 tmp[%d] = %x\n", i, tmp);
                tmp &= 0xff;
                tmp[i+1] = tmp/100;
                printf("tmp[%d] = %0x\n", i, tmp);
                tmp = hex2bcd(tmp);
                ptr[2*i] = (tmp>>4) & 0x0f + 0x30;
                ptr[2*i + 1] = tmp & 0x0f +0x30;
                m >>= 8;
        }
        printf("tmp %s\n", tmp);
        for (i = 0; i < 4; i++)
        {
                printf("tmp[%d] = %x ", i, tmp);
        }
        return 0;
}
int main()
{
        int n= 1234;
        char str[10] = {0};

        voidhex2bcd(n, str);
        printf("str %s\n", str);
        return 0;
}
m0 = d2 tmp---[0]=ffffffd2 x = ffffffd2
1 tmp[0] = ffffffd2
tmp[0] = ffffffd2
m1 = 4 tmp---[1]=4 x = 4
1 tmp[1] = 4
tmp[1] = 4
m2 = 0 tmp---[2]=0 x = 0
1 tmp[2] = 0
tmp[2] = 0
m3 = 0 tmp---[3]=0 x = 0
1 tmp[3] = 0
tmp[3] = 0
tmp �
tmp[0] = ffffffff tmp[1] = 0 tmp[2] = 0 tmp[3] = 0 str ??

论坛徽章:
0
2 [报告]
发表于 2012-12-10 16:18 |只看该作者
char只有一个字节,怎么会显示出来四个字节的长度,而后面却是正常的呢?想了好久了,求解答( ⊙ o ⊙ )啊!

论坛徽章:
0
3 [报告]
发表于 2012-12-10 16:25 |只看该作者
能问一下么,为什么要把int转bcd码?

论坛徽章:
0
4 [报告]
发表于 2012-12-10 16:38 |只看该作者
协议中报文的要求啊,一个数是按照字符串的形式传送的,而bcd码就是存储在字符串的一种形式回复 3# fenghw8088


   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2012-12-10 16:52 |只看该作者
printf的时候,负数符号扩展了

论坛徽章:
0
6 [报告]
发表于 2012-12-10 18:28 |只看该作者
这个怎么讲?我的数是正数,怎么符号会是负号呢?回复 5# hellioncu


   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2012-12-11 08:27 |只看该作者
只为你飘的雪 发表于 2012-12-10 18:28
这个怎么讲?我的数是正数,怎么符号会是负号呢?回复 5# hellioncu


把你的char改成unsigned char
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP