单片机串口收发字符和数字的函数
2014-01-18 15:42
302 查看
/************************************************
功能:将整形转换为ascii码字符串
示例:dat = 12345 buffer[10]
转换后
buffer[0] = '1'
buffer[1] = '2'
...
buffer[4] = '5'
buffer[5] = '\n'
**********************************************/
void DtoA(unsigned long dat, unsigned char* buffer)
{
unsigned long tmp = dat;
char length = 0;
while(tmp != 0)//求出数字的实际长度
{
tmp = tmp/10;
length++;
}
buffer[length] = '\0';//长度数为字符串截止位
length--;
while(length >= 0)//数字的低位放入数组的高位
{
tmp = dat%10;
buffer[length--] = 0x30|tmp;
dat = dat/10;
}
}
/****************************************************
功能:将ascii码字符串(非ascii也可)转换成对应数字
unsigned char code date[] = "1234567"; -> 返回 1234567
unsigned char code date_neg[] = "-1234567"; -> 返回 -1234567
****************************************************/
long mi(unsigned char dat, unsigned char mi)
{
unsigned char i;
long sum = 1;
for(i=0; i<mi; i++)
{
sum = sum * dat;
}
return sum;
}
long AtoD(unsigned char* buffer)
{
long dat = 0, tmp = 0,k;
unsigned char i;
char j = 0;
i = strlen(buffer);
if(buffer[0] == '-')
{
j = 1;
}
for(; j<i; j++)
{
tmp = buffer[j]&0x0f;//如果原数组中存放的是ascii码,直接将其转换为数字
k = mi(10,i-j-1);
tmp = k * tmp;
dat += tmp;
}
if(buffer[0] == '-')
{
return -dat;
}
return dat;
}
void SendString(unsigned char* String)
{
int i=0;
while(String[i] != '\0')
{
SendData(String[i]);
i++;
}
}
void SendDig(long dat)
{
char buffer[36];
DtoA(dat, buffer);
SendString(buffer);
}
功能:将整形转换为ascii码字符串
示例:dat = 12345 buffer[10]
转换后
buffer[0] = '1'
buffer[1] = '2'
...
buffer[4] = '5'
buffer[5] = '\n'
**********************************************/
void DtoA(unsigned long dat, unsigned char* buffer)
{
unsigned long tmp = dat;
char length = 0;
while(tmp != 0)//求出数字的实际长度
{
tmp = tmp/10;
length++;
}
buffer[length] = '\0';//长度数为字符串截止位
length--;
while(length >= 0)//数字的低位放入数组的高位
{
tmp = dat%10;
buffer[length--] = 0x30|tmp;
dat = dat/10;
}
}
/****************************************************
功能:将ascii码字符串(非ascii也可)转换成对应数字
unsigned char code date[] = "1234567"; -> 返回 1234567
unsigned char code date_neg[] = "-1234567"; -> 返回 -1234567
****************************************************/
long mi(unsigned char dat, unsigned char mi)
{
unsigned char i;
long sum = 1;
for(i=0; i<mi; i++)
{
sum = sum * dat;
}
return sum;
}
long AtoD(unsigned char* buffer)
{
long dat = 0, tmp = 0,k;
unsigned char i;
char j = 0;
i = strlen(buffer);
if(buffer[0] == '-')
{
j = 1;
}
for(; j<i; j++)
{
tmp = buffer[j]&0x0f;//如果原数组中存放的是ascii码,直接将其转换为数字
k = mi(10,i-j-1);
tmp = k * tmp;
dat += tmp;
}
if(buffer[0] == '-')
{
return -dat;
}
return dat;
}
void SendString(unsigned char* String)
{
int i=0;
while(String[i] != '\0')
{
SendData(String[i]);
i++;
}
}
void SendDig(long dat)
{
char buffer[36];
DtoA(dat, buffer);
SendString(buffer);
}
相关文章推荐
- Gerrit 提交commit
- 《java解惑》:数值表达式
- [OS5完美版] 产品背后的故事——百变主题篇
- 实践得出的结论 /etc/sysctl.conf 很优化了
- Java数组及其内存分配
- 51单片机外部中断示例
- Python-Project Euler 38
- Unity 之 移动设备的触控操作
- IOS 设备旋转
- Java数组及引用类型内存分配
- 如何使用DDMS Heap查看Android应用内存情况
- GetDlgItem(IDC_STATIC)->SetWindowText(str); 使用静态文本框怎么都不能正常显示
- 传入一个字符串,如何获得这个字符串中所有字符出现的个数
- cc debugger固件下载
- 如何用idapython脚本获取字符串窗口的数据并写入文件
- Linux命令详解之file
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
- 在linux下用wget整站下载网站
- ServiceEndpoint(终结点)
- hdu 1978 How many ways(DP)