OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6944|回复: 11

C语言求助:关于数字与字符串的对应怎么做

[复制链接]

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
发表于 2016-1-29 16:41:58 | 显示全部楼层 |阅读模式
5金钱
如题。
我的需求是用printf打印出板卡类型等调试信息。

我知道printf显示字符的用法大概是下面这样:
printf("\r\n  the char is %s the chinese is %s  \r\n","abcdefg,","中华五千年");

也会把字符放在数组里:
char *BoardType_Display [3]={
"主控板",
"采集板",
"发送板"
}


printf("\r\n  the board type is %s  \r\n","abcdefg,",BoardType_Display [1]);


上面的例子中我是用数组的下标来对应板卡类型的。实际上板卡类型是用两个字节来表示的,比如0x0302代表采集板,0x0101代表主控板。

那么请问我该怎样把板卡类型和那两个字节对应起来并通过串口打印出来呢?

最佳答案

查看完整内容[请看2#楼]

看起来楼主似乎只是需要写代码时候方便记忆?那就是用#define 吧 如果是需要运行时根据某些函数返回值决定,那楼主应该主要问题在于不可能定义一个指针数组达到array[0xFF][0x5A]这么大,不知我说的对么?如果是这样,那就用稀疏矩阵来存储吧,可百度“三元组表”
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-1-29 16:41:59 | 显示全部楼层
看起来楼主似乎只是需要写代码时候方便记忆?那就是用#define 吧
如果是需要运行时根据某些函数返回值决定,那楼主应该主要问题在于不可能定义一个指针数组达到array[0xFF][0x5A]这么大,不知我说的对么?如果是这样,那就用稀疏矩阵来存储吧,可百度“三元组表”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-29 16:47:41 | 显示全部楼层
%x不行吗?
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2016-1-29 23:46:24 | 显示全部楼层
我看出来低字节是和数组线性对应的
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 08:01:08 | 显示全部楼层
emWin 发表于 2016-1-29 23:46
我看出来低字节是和数组线性对应的

其实不是的,有好多板,我只是随便举例的,如果一个字节就能避免重复的话我们也不会用两个字节了。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 08:02:30 | 显示全部楼层

%x可以帮我实现那种对应关系吗?我真的没想通。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-1-30 10:20:25 | 显示全部楼层
不太清楚LZ是什么需求。这个数字是写代码的时候定义的呢?还是运行时根据某些函数返回值来决定的呢?
最保险的方法就是……switch case
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 10:56:58 | 显示全部楼层
yyx112358 发表于 2016-1-30 10:20
不太清楚LZ是什么需求。这个数字是写代码的时候定义的呢?还是运行时根据某些函数返回值来决定的呢?
最保 ...

需求就是比如我知道了0X0302,就可以以他为参数打印出采集板这三个字。
我也想过switch case,资源占用没深究过,但是板卡特别多的时候会使调试代码变得很长,看起来很不漂亮。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 11:02:42 | 显示全部楼层
我暂时用了一个二维数组解决它:
char *BoardType_Display [board_type_number+2]={
"默认板",
"未定义的板",
"主控板",
"主交叉板",
"单路发送板",
"8路发送板",
"32路发送板",
"8路采集板",
"32路采集板",
"传感器采集板"

};

uint8_t BoardType_Display_table[5][4]={
{0,1,1,1},
{1,2,3,1},
{1,4,5,6},
{1,7,8,1},
{1,9,1,1}       
};

然后比如说我得到的板卡类型是0x0302,
我就调用函数:
printf("\r\n 板卡类型是 %s",BoardType_Display[BoardType_Display_table[0x03][0x02]]);
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 11:05:31 | 显示全部楼层
但是假如板卡类型是0xff5a,那我这个方法就显得很无力了。我相信一定有其他结构可以实现这种对应关系的。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2016-1-30 12:22:35 | 显示全部楼层
至少可以用查找表,用二分法找也不会太慢。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
 楼主| 发表于 2016-1-30 13:28:17 | 显示全部楼层
emWin 发表于 2016-1-30 12:22
至少可以用查找表,用二分法找也不会太慢。

谢谢。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 03:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表