主题 : mini2440串口发送16进制数 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 63205
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-02-16
最后登录: 2012-03-15
楼主  发表于: 2012-02-16 10:08

 mini2440串口发送16进制数

想用mini2440上串口0发送16进制数。但是看了很多例子都是发送字符。也知道 串口是发送每个字符的asic码的。 但如果真要发送一个比如像24这样的实实在在的数的时候,请问我该怎么定义啊。 这样行吗 char m=24; write(fd,&m,1);  这样是不是就把24这个数发出去了。 但终端上由于24对应的ASICII字符不能显示。所以就没显示出来。 我这样理解对吗?
好好赚钱,保护媳妇。。。
级别: 新手上路
UID: 49714
精华: 0
发帖: 43
金钱: 255 两
威望: 51 点
综合积分: 86 分
注册时间: 2011-06-14
最后登录: 2012-06-25
1楼  发表于: 2012-02-16 16:16
串口的传输本质上就是二进制bit流,十六进制和ascii是一样的   只是传输后的显示方式不同而已
下面是十六进制转字符和字符串转十六进制的函数
关于串口编程看下这个帖子:http://blog.csdn.net/hen_man/article/details/7248887
char HexChar(char c)
{

    if ((c >= '0') && (c <= '9'))

        return c - 0x30;

    else if ((c >= 'A') && (c <= 'F'))

        return c - 'A' + 10;

    else if ((c >= 'a') && (c <= 'f'))

        return c - 'a' + 10;

    else

        return c;

}
int strHex(char *str, char *data)
{

    int t, t1;
    unsigned char l, h;

    int rlen = 0, len = strlen(str);
    int i;

    for (i = 0; i < len;)
    {

        h = *(str + i);    //.GetAt(i);
        if ((0 < h) && (h < 128))    //鍒ゆ柇姝ゅ瓧绗︽槸鍚︿负姹夊瓧
        {

            i++;

            if (i >= len)

                break;

            l = str;

            t = HexChar(h);

            t1 = HexChar(l);

            t = t * 16 + t1;

            i++;

            data[rlen] = (char)t;

            rlen++;

        }

        else
        {

            data[rlen] = h;    //
            rlen++;

            i++;

        }

    }

    return rlen;

}
嘿嘿。。
级别: 新手上路
UID: 63205
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-02-16
最后登录: 2012-03-15
2楼  发表于: 2012-02-16 16:46
谢谢   我试过了  确实是 如果发送的数字 其实就是一个ASIC码 通过串口发送出去,然后在终端上转成对应的字符显示出来。