找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2404|回复: 5
收起左侧

C语言长整型变量long转字符串发送问题

[复制链接]
ID:398219 发表于 2021-9-1 08:00 | 显示全部楼层 |阅读模式
C语言定义长整型变量unsigned long count=123456;
我想通过串口,将这个变量上传服务器,请问如何将这个long变量转成字符串通过串口发送呢,程序中发送命令在POST(),请各位大神帮忙看看。

void POST(void)//POST数据函数
{
        int dataLen;
        uchar postData[150];
        char strLen[3];
        char strtemp[20];
        sprintf(strtemp,"%d",count);
        sprintf(postData,"uid=%s&topic=%s&msg=#%0x#\r\n",Uid,Topic,strtemp);
        dataLen = strlen(postData);             //计算数据长度
        sprintf(strLen,"%d",dataLen);                     //int类型转char


        ESP8266_Set("AT+CIPMODE=1"); //开启透明传输模式
        ms_delay(1000);
        ESP8266_Set("AT+CIPSTART=\"TCP\",\"api.bemfa点com\",80");  // 连接服务器和端口
        ms_delay(1000);
        ESP8266_Set("AT+CIPSEND"); //进入透传模式,下面发的都会无条件传输
        ms_delay(1000);
        ESP8266_Set_Only("POST /api/device/v1/data/1/ HTTP/1.1\r\nHost: api.bemfa点com\r\nContent-Type: application/x-www-form-        urlencoded\r\nConnection:close\r\nContent-Length:");//??device? ??sensor?
        ESP8266_Set(strLen);//数据长度(postData数据长度),一定要准确
        ESP8266_Set("");//回车(发完数据长度后,有回车,不懂的百度http post 格式)
        ESP8266_Set(postData);//发送数据        
        ms_delay(2000);
        ESP8266_Set("+++"); //
        memset(strLen,'\0',3);  //重置数组
        memset(postData,'\0',sizeof postData);//重置数组

}

V3.1 - 测试无线通讯.rar

82.52 KB, 下载次数: 3

回复

使用道具 举报

ID:624769 发表于 2021-9-1 19:04 | 显示全部楼层
传数据给服务器,最好不要转字符串,要转也是服务器收到后,服务器端转,不知道现在编程都是什么思路,我们以前但凡牵涉到传输,恨不得把4个字节拼成1个字节传,现在倒好各个都喜欢把一个字节拆成十几个来传.

Long 型 32位数据,最长10位10进制,最直接的办法就是
SendByte_uart((count / 1000000000)+'0');
SendByte_uart(((count % 1000000000) / 100000000)+'0');
SendByte_uart(((count % 100000000) / 10000000)+'0');
SendByte_uart(((count % 10000000) / 1000000)+'0');
SendByte_uart(((count % 1000000) / 100000)+'0');
SendByte_uart(((count % 100000) / 10000)+'0');
SendByte_uart(((count % 10000) / 1000)+'0');
SendByte_uart(((count % 1000) / 100)+'0');
SendByte_uart(((count % 100) / 10)+'0');
SendByte_uart((count % 10)+'0');

这样最直接,你要是觉得没有For循环不够高大上,可以做个循环,每次求出与数存为下一次的被除数,如果你觉得首位不要显示0,可以加一个判断,比如:
if((count / 1000000000) != 0)  SendByte_uart((count / 1000000000)+'0');
恩,差不多就是这样。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:401564 发表于 2021-9-1 22:04 | 显示全部楼层
unsigned long count=123456;
unsigned char,a;
char strtemp[20];
sprintf(strtemp,"%.0f",count);        //"%.0f"的0f表示小数点后再显示位数,不显示小数就是0f,方便处理浮点型
                for(a=0;k[a]!='\0';a++)                          //字符串以'\0'结束,
                        {       
                                发送函数; 这个实际上就发送了'0','2','3','4','5' 记录了发送几个字符                       
                        }
回复

使用道具 举报

ID:750420 发表于 2021-9-2 15:14 | 显示全部楼层
同意二楼说法,使用sprintf函数进行发送,基本形式为
char chuan[100];
long a;
sprintf(chuan,"long:%ld",a);
楼主可以尝试用下看看chuan数组内的内容
回复

使用道具 举报

ID:839835 发表于 2021-9-3 17:03 | 显示全部楼层
本帖最后由 xunzhaod 于 2021-9-3 17:10 编辑

直接用指针不就行啦?
char (*p)[4] =(char(*)[4] ) &count;
回复

使用道具 举报

ID:398219 发表于 2021-9-9 14:20 | 显示全部楼层
谢谢大家的分享,咨询了管理员,只改了一个字母就行啦,可以上传并被服务器识别。谢谢大家
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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