题意如上,例如怎样把unsigned int shuju [4096]={12345,54321} 这一数组里的数据经过字符转换后,发送给pc机上的VB接收程序存储起来!我是菜鸟,还望各位高手不吝赐教,感谢!积分全部奉上,虽然不多,但恳请各位给予援手,感激不尽啊(我想提高悬赏,却提示已达次数上限,郁闷)unsigned int shuju [4096]={12345,54321}怎样分“位”后,进行字符强制转换,并且在发送时怎样区分12345和54321这两个数据,利用for循环或其他方式分别发送12345和54321??? 因为{12345,54321}数据之间有“,”逗号 最好各位高手能提供些c51程序或相关实例,以促进鄙人的理解。 当单片机把字符型数据发送给pc机vb程序后,怎样再把数据还原为整型数组shuju [4096]={12345,54321}?
做一个整形到ASCII的转换函数。如果你要发送的数据最大值可以确定,可以根据最大值定义一个ASCII数组,数组的每一个单元存放整形数据的一位。发送前先对发送整形数组里的单元转换成ASCII数组,然后再按照通用的发送函数进行发送。void InttoChar (uint IntNumber)//---------------------------------------------------------// Name: void InttoChar (int IntNumber)// Func.: Translate integer to ASCII charactor array// Char.: IntNumber number to be translated to ASCII charactor//---------------------------------------------------------{ if (IntNumber < 10) { AsciiArray[0] = IntNumber + 0x30; AsciiArray[1] = 0x20; AsciiArray[2] = 0x20; AsciiArray[3] = 0x20; AsciiArray[4] = 0x20; return; } if (IntNumber < 100) { AsciiArray[0] = IntNumber / 10 + 0x30; AsciiArray[1] = IntNumber % 10 + 0x30; AsciiArray[2] = 0x20; AsciiArray[3] = 0x20; AsciiArray[4] = 0x20; return; } if (IntNumber < 1000) { AsciiArray[0] = IntNumber / 100 + 0x30; AsciiArray[1] = IntNumber % 100 / 10 + 0x30; AsciiArray[2] = IntNumber % 10 + 0x30; AsciiArray[3] = 0x20; AsciiArray[4] = 0x20; return; } if (IntNumber < 10000) { AsciiArray[0] = IntNumber / 1000 + 0x30; AsciiArray[1] = IntNumber % 1000 / 100 + 0x30; AsciiArray[2] = IntNumber % 100 / 10 + 0x30; AsciiArray[3] = IntNumber % 10 + 0x30; AsciiArray[4] = 0x20; return; } else { AsciiArray[0] = IntNumber / 10000 + 0x30; AsciiArray[1] = IntNumber % 10000 / 1000 + 0x30; AsciiArray[2] = IntNumber % 1000 / 100 + 0x30; AsciiArray[3] = IntNumber % 100 / 10 + 0x30; AsciiArray[4] = IntNumber % 10 + 0x30; return; }}
单片机串口只能发送unsigned char 型的数据,所以要发送int型数据的话可以用分离变量法写一个函数,int型数据的每一位分离再发送。比如发送 12 ,就 unsigned char shi=12/10; unsigned char ge=12%10;这样就把12的10位个位分开啦,当然这只是个比方,你可以把这种方法他写成函数,然后调用就可以啦。如有疑问,请提出..
先把需要发送的数据转换成字符串,然后发送到PC上,在PC端需要把接收的字符串转换成数据。有专门的库函数提供转换功能,当然这些函数自己也能写出来。我这里根据你现有的情况,简单提供一下所需要的库函数:1、int atoi (char *string) 这个是把字符串转换成整型数。 简单例子: #include <stdlib.h> void tst_atoi (void) { int i; char s [] = "12345"; i = atoi (s); //这里的结果就是把字符串的“12345”,转换成了整型数据12345 }2、long strtol ( char *string, /* string to convert */ char **ptr, /* ptr to subsequent characters */ unsigned char base); 功能:把字符串转换为有符号的长整型数据 简单例子: #include <stdlib.h>#include <stdio.h>void tst_strtol (void) { long l; char s [] = "-123456789stuff"; char *p; l = strtol (s, &p, 10); //这里的l就等于 -123456789 ,为有符号整型数据 printf ("strtol(%s) = %ld\n", s, l);// 指针p指向"stuff" }希望对你有帮助,个人邮箱为: ppt1845@163.com
楼上的是个方法,但是假如数组里的数据是不定的,并非你初始化完成的呢?譬如AD采样 需要把采样值送给PC 这样的做法就不合理 一般是把数据分“位”分出来 如发送12345,得先把1提出在加48(0的ASCII码)2提出在加48(0的ASCII码),3提出在加48(0的ASCII码)……发完5个字节之后加发个0x20(空格的ASCII码)用于区别2个数据