char型字符转16进制

五行外的小和尚 2013-11-27 09:49:58
假如我有一串字符串,s=“abcd123 abcd 123 ”里面包括了空格等等的,我现在想把他转成“616263643132332061626320313233”,这个字符串里面没有包含回车等等,只要对端给我穿过来的数据,我都要转成对应的hex值,这个有现成的函数没?或者说有方法没? 我想过如果定义一个a[127]={"1""2""3""4"、、、、、}等等,就是把每个字符都弄进去,然后我再定义一个b[127]={“31”“32”“33”“34”、、、、、、},然后把字符串s中的每一个字符,都逐一用for循环来对比
void SendStr(uchar array[n])
{
for(i=0;i<=n;i++) //检测是否字符串末尾, '\0'表示字符串结束标志,
for(x=0;x<127;i++)
{if (
a[x]==array[i];
array[i]=b[x];
)
SendByte(array[i]) ;
}


}

void SendByte(uchar dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
...全文
2058 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2013-11-28
  • 打赏
  • 举报
回复
字符是统一编码的(ASCII 码)。 != 0x21 @ = 0x40 # = 0x23 你用版主的函数就都搞定了。
dceacho 2013-11-28
  • 打赏
  • 举报
回复
引用 8 楼 of123 的回复:
是除以 16 和模 16 吧?或者写成 0x10?
嗯,是写错了.
  • 打赏
  • 举报
回复
引用 8 楼 of123 的回复:
是除以 16 和模 16 吧?或者写成 0x10?
我知道怎么回事,比如,一个a,实际也是97,他可以以各种进制输出,但是我想取十六进制的用,我要的不仅仅是数字和字母,比如“!@#”,等,我实际上都是要传的,我就是不知道怎么把字符串中每一个字符的十六进制取出来,然后赋值给另外一个字符串,然后我再来进行传输。
of123 2013-11-28
  • 打赏
  • 举报
回复
是除以 16 和模 16 吧?或者写成 0x10?
dceacho 2013-11-28
  • 打赏
  • 举报
回复


#include<iostream.h>
#include <stdio.h>
char buf[128];
char * hextodstr(char * src)
{
unsigned char i=0;
while(*src!=0)
{
   buf[2*i]=*src/16+'0';
   buf[2*i+1]=(*src%16)+'0';
   src++;
   i++;
   if(i>=64)
   {
//缓冲区不够
   return buf;
   }
}
return buf;
}
void main()
{        
  char *test="123456abcdefghijk";
  printf(hextodstr(test));
  getch();
}  
C语言基础不扎实
  • 打赏
  • 举报
回复
引用 7 楼 wangfan027 的回复:

char buf[128];
char * hextodstr(char * src)
{
    unsigned char i=0;
    while(*src!=0)
    {
       buf[2*i]=*src/16+'0';
       buf[2*i+1]=(*src%16)+'0';
       src++;
       i++;
       if(i>=64)
       {
            //缓冲区不够
           return buf;
       }
    }
    return buf;
}
执行之后一直报错,D:\软件安装文件夹\VC6.0\Microsoft Visual Studio\MyProjects\字符串处理\字符串处理.cpp(7) : error C2601: 'hextodstr' : local function definitions are illegal 我就加了一个main函数 #include<iostream.h> #include <stdio.h> void main() { char buf[128]; char * hextodstr(char * src) { unsigned char i=0; while(*src!=0) { buf[2*i]=*src/16+'0'; buf[2*i+1]=(*src%16)+'0'; src++; i++; if(i>=64) { //缓冲区不够 return buf; } } return buf; } }
Chimey 2013-11-27
  • 打赏
  • 举报
回复
直接调用库函数atoi
dceacho 2013-11-27
  • 打赏
  • 举报
回复
不关字符还是什么,都是数,本质都是一样的 在非UNICODE下 对于字符串"abcd 123 abcd 123"里面就是十六进制数字,对应的你查ASCII表或者仿真暂停一下就能看到, string str="abcd 123 abcd 123"; char ch[17]={'a','b','c','d',' ',.....};其实是一样的
dceacho 2013-11-27
  • 打赏
  • 举报
回复
直接强制转换就行了啊,不需要什么其他方法或程序
  • 打赏
  • 举报
回复
这个有没有其他方法或者程序去实现?这个方法就是历遍的方法,但是太耗时间了,并且我还得定义a[]b[],我感觉太复杂了。。。
dceacho 2013-11-27
  • 打赏
  • 举报
回复

char buf[128];
char * hextodstr(char * src)
{
unsigned char i=0;
while(*src!=0)
{
buf[2*i]=*src/16+'0';
buf[2*i+1]=(*src%16)+'0';
src++;
i++;
if(i>=64)
{
//缓冲区不够
return buf;
}
}
return buf;
}
dceacho 2013-11-27
  • 打赏
  • 举报
回复
引用 5 楼 u012201491 的回复:
[quote=引用 3 楼 wangfan027 的回复:] 不关字符还是什么,都是数,本质都是一样的 在非UNICODE下 对于字符串"abcd 123 abcd 123"里面就是十六进制数字,对应的你查ASCII表或者仿真暂停一下就能看到, string str="abcd 123 abcd 123"; char ch[17]={'a','b','c','d',' ',.....};其实是一样的
我知道,当以 printf (“%x”)的时候,输出的就是十六进制的结果,但是我现在是这样的情况,我的单片机有两个串口,一个串口接收到字符串,另外一个串口接华为的GPRS,给这个GPRS发送数据的时候,必须用AT%IPSEND="3132333440",所以我必须得把接收的字符串都转成十六进制然后才能发送的! atoi是转整型的,不是十六进制的。。。[/quote] 那自己写一个吧,明白原理的话很简单
  • 打赏
  • 举报
回复
引用 3 楼 wangfan027 的回复:
不关字符还是什么,都是数,本质都是一样的 在非UNICODE下 对于字符串"abcd 123 abcd 123"里面就是十六进制数字,对应的你查ASCII表或者仿真暂停一下就能看到, string str="abcd 123 abcd 123"; char ch[17]={'a','b','c','d',' ',.....};其实是一样的
我知道,当以 printf (“%x”)的时候,输出的就是十六进制的结果,但是我现在是这样的情况,我的单片机有两个串口,一个串口接收到字符串,另外一个串口接华为的GPRS,给这个GPRS发送数据的时候,必须用AT%IPSEND="3132333440",所以我必须得把接收的字符串都转成十六进制然后才能发送的! atoi是转整型的,不是十六进制的。。。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧