MFC C++ 从十进制转换到十六进制转十进制工具string

------解决方案--------------------是来散分的吗?我接------解决方案--------------------what's your question?------解决方案--------------------个人理解,继承更多的用来标准化公共接口。
如果,你的基类只是简单的为了完成一些独立功能, 包含和继承却别不大。------解决方案--------------------我也来接分,我个人认为提出所谓的包含或组合根本就是没事找事,因为这个东西我们广大程序员一直在用,用得非常自然,可有的脑残非要把它提出来和继承相提并论,把简单的东西弄复杂,搞得很高端洋气上档次,好比萝卜开会非要叫成群英荟萃。------解决方案--------------------我也来接分,包含和继承有点无聊.....
Linux 环境上搭建 Jenkins(Hudson)平台
Linux 环境下搭建 Jenkins(Hudson)平台安装jenkins:
安装 jenkins 有两种方式:
安装方式一: sudo java -jar jenkins.war –httpPort=18080 –ajp13Port=18009但是很多时候我们是使用SSH方式到目标机器上的,放我们关闭SSH连接时,这个命令也会被中断,jenkins服务会被终止,我们不可能一直保持这SSH连接,怎么办?可以把这行命令写成 shell 脚本,然后使用 nohup sh jenkins.sh &
命令启动这个脚本,这样jenkins就能正常提供服务了。
安装方式二:安装 RPM包
为了能够使用jenkins库,首先需要导入jenkins库的 key:sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key安装软件(以jenkins-x.x.x.rpm为例):yum install jenkins-x.x.x.rpm
删除软件:yum remove jenkins-x.x.x.rpm或者yum erase jenkins-x.x.x.rpm
升级软件:yum upgrade jenkins或者yum update jenkins
查询信息:yum info jenkins
开启服务(关闭,重启):
sudo service jenkins start|stop|restart检查jenkins是否安装完成: localhost:8080 (默认是8080 端口,如果采用安装方式一,那么就需要指定的端口)
运行job时遇到的问题:
mvn:command not found
遇到的问题: 不能使用MVN命令;
排查过程:
①Jenkins 默认创建进程,启动任务的用户名是 jenkins,使用root权限查看passwd,可以看到这个用户默认情况下 ssh 为false,也就是说这个用户默认情况下是不能使用ssh进行登录的,除非修改 passwd中相应字段为 bash,然后sourse;
jenkins:x:500:500:mengqc:/home/jenkins:/bin/fasle
passwd文件的格式:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序
②默认情况下 Jenkins 的安装目录是 /var/lib/jenkins/ ,项目根目录是 /var/lib/jenkins/jobs/workspace从目录上看,就知道这个是需要 root 权限才能执行一些命令,但是我们通过界面 执行一些命令使用的是admin用户,纵使我们在 根目录下 能适应mvn命令,但是问题也不能解决。
还有一个简单的测试Maven 是否加入到了环境变量中的方法,在执行mvn命令时,填写maven安装的绝对路径,如果能够执行,说明不是权限的问题,而是环境变量的问题。
解决方案一:
①安装 ssh slave 插件;
②启动slave 服务;
③jenkins-系统管理-节点管理:重新设置 slave机器的 Remote FS root 为 /home/admin/xxx
(主要是添加了workspace的目录) $ITEM_ROOTDIR
④把master的节点数设为0,这样默认情况下就会使用 slave节点。
如果修改 工作目录(Remote FS root),可能会遇到:“main”java.lang.NoclassDefFoundError:hudson/maven/agent/Main原因:我们修改了slave的工作目录,但是slave服务没有重启导致;
解决方法:使用我们的脚本 对slave进行 重启操作。
解决方案二:
在 /home/admin/目录下新建一个工作目录,然后将 /var/lib/jenkins目录设置成一个跳转链接 ,链接到admin目录下 [sudo ln -s /home/admin/xxx/
/var/lib/jenkins] ,然后将/var/lib/jenkins 目录下的文件 mv 到/home/admin/xxx/ 目录下。
mvn和一些基本的命令是可以运行了,但是运行shell脚本时还是没有权限,因为 新建的这个跳转连接user=root ,group=root,并且对这个链接 使用chown/chgrp 都是没有效果的,执行一些操作命令是还是没有权限;
解决方案三:修改默认 jenkins 用户为 admin
①安装jenkins
(我们一般使用的是admin权限)sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
rpm -ql jenkins
②. 配置jenkins
// edit JENKINS_PORT, JENKINS_USER
sudo vi /etc/sysconfig/jenkins
(把 JENKINS_USER 设置为 admin)
③. 修改jenkins权限(如果修改JENKINS_USER情况下)
sudo chown -R admin /usr/lib/jenkins
sudo chgrp -R admin /usr/lib/jenkins
sudo chown -R admin /var/log/jenkins
sudo chgrp -R admin /var/log/jenkins
sudo chown -R admin /var/lib/jenkins
sudo chgrp -R admin /var/lib/jenkins
sudo chown -R admin /var/cache/jenkins
sudo chgrp -R admin /var/cache/jenkins (这个如果不改,会出现404)
④. 启动jenkins
sudo /sbin/service jenkins start
sudo service jenkins start
MFC 串口数据16进制转成10进制有关问题
MFC 串口数据16进制转成10进制问题我用Visual studio 2010的MSSCOMM控件做一个PC机和单片机的串口通信界面,我要把单片机发送给PC机的数据进行处理。比如单片机发送的数据是0xABCD,我想把BC显示在一个编辑框,但是以10进制数显示,也就是显示数为188,。不知道怎么编程,求帮助。下面的程序是我把BC显示在编辑框的程序,但是是以16进制显示的,急求大家帮我改改程序。
void CCommTestDlg::OnCommMscomm1()
// TODO: 在此处添加消息处理程序代码
VARIANT variant_
COleSafeArray safearray_
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
if(m_mscomm.get_CommEvent()==2) //事件值为2表示接收缓冲区内有字符
////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_mscomm.get_Input(); //读缓冲区
safearray_inp=variant_ //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k&k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k&k++) //将数组转换为Cstring型变量
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(_T("%x"),bt); //将字符送入临时变量strtemp存放
m_EditReceive+=strtemp.Mid(1,2); //加入接收编辑框对应字符串
UpdateData(FALSE); //更新编辑框内容
------解决方案--------------------将需要的字节数取出,然后使用sprintf------解决方案--------------------CS
BYTE d[10];//长度是接收字节数,这里设为10个字节
for(k=0;k&k++) //将数组转换为Cstring型变量
d[k]=*(BYTE*)(rxdata+k); //字符型
strtemp.Format(_T("%d"),dk[1]); //假设0XBC在第二个位置
m_EditReceive+= //加入接收编辑框对应字符串
这是把第二个字节转成十进制显示,如果把每个字节都显示在编辑框里,就把这两条语句放在循环里
------解决方案--------------------
int strHexToInt(char* strSource)
int nTemp=0;
CString strT
strTemp=strS
for(char cc='G',dd='g';
cc&='Z',dd&='z';
cc++,dd++)
//判断输入的字符串是否合法
if(strTemp.Find(cc,0)!=-1------解决方案--------------------strTemp.Find(dd,0)!=-1)
::MessageBox(NULL,"请输入正确的16进制字符串!","输入错误",MB_ICONEXCLAMATION);
return -1;
for(int i=0;i&2;i++)//(int)::strlen(strSource);
switch(strSource[i])
case 'A': nDecNum = 10;
case 'B': nDecNum = 11;
nDecNum = 12;
nDecNum = 13;
nDecNum = 14;
nDecNum = 15;
nDecNum=strSource[i]-'0';
AfxMessageBox("数据格式不对!");
return -1;
nTemp+=nDecNum*(int)::pow(16,2-i-1);//::strlen(strSource)-i-1);
------解决方案--------------------#include &stdlib.h&
CString str = _T("BC");
ULONG ulVal = _tcstoul(str, NULL, 16);
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:各位高手,。如何将十六进制数转化为十进制(用c++语言编写个程序来实现现)看看我的程序的问题在哪里谢谢_百度知道
各位高手,。如何将十六进制数转化为十进制(用c++语言编写个程序来实现现)看看我的程序的问题在哪里谢谢
提问者采纳
a[i]=a[d-i];;
nm_exc_tn(&
if (c==0)&void nm_exc_tn(char[]。&quot,0不查看&quot?任意数字查看;
strcpy( for(i=1;&b&&&
if(b;i++){
f=f*10+a[i]-'0'=){
a[d]=f%10+'+10&='& while(f&
nm_exc_thr(fb,超过十进制输入大写字母)&
cout& for(int i=0;”&&i&='
fb[i]=0;&&
fn[i]=0;&#include&lt!=10&&c; }
d=d-1;”转化为&iomanip?0退出 任意数继续&进制数“&quot,fb);b&i++){
ch=a[i];&&&a[i]&请依次输入需要转换的数;&&10) if(a[i]-'Exiting……& while(a[d]==0) d--;b&
f=f/c;/ cout&&i&A'&&& for(i=0;&&0'&&&0'输入有误;&
f=f/=、目标进制; } d=d-1;&进制数“&void main(){ int b.h&gt!=0) cout&i&&i&/ for(i=0;&是否需要查看中途十进制转换结果、原进制;='='&i++);&; } cout&
cout& int f=0; }}void nm_exc_thr(char a[40];&a&
a[i]=0;&A'&
if(a[i]&}void nm_exc_tn(char a[40]#include&&&
a[d-i]=;c;&&=d,int); cout&
if (i==40) char fb[40],c),int b){ int d=39;i++){
if (a[i]&A'i&&&&fb&i++){
ch=a[i]; for(int i=0;A'&您输入的&2;&&&&a[i]&lt,c; while(f&=10) a[d]=f%c-10+&#39.h&欢迎使用进制自动转换软件&&0'&+10;0' char a[40];&&0){
if(f%c& int f=0.h&十进制串 for (int i=0;
a[d-i]=ch、目标进制(均以数字方式输入;是否继续;40;&&/=b)您输入的&=b)
for(;目标串 char fn[40];){
for(i=1;0'但如原进制为十进制或目标进制为十进制;”转化为十进制为“&&
strcpy (0 } d=0;=d;i&& cout&i&a&&&
cout& while(a[d]==0) d--;
cin&;正在退出……&
} d=0、原进制;2;&
a[i]=a[d-i];&
else f=f*b+a[i]-'&quot,请重新输入正确转换数;=d/; }
cin&&&此软件在进制转换过程中会自动先将原数转换为十进制;i&#include&Z&#39,int);c;
cout&='&) f=f*b+a[i]-';40;&&a[i]&
a[i]=0;) if(a[i]-'&0';i++){
if(a[i]&/进制为“&c& for(i=1;i++);”&9'
else a[d]=f%c+'&){
for(i=0;&&&&fn&&&&&&&gt,如需查看请在结束时选择&
d=d+1;&lt!=10){
cout&=,b);a&lt,转换数字越界;&&gt,int c){ int d=39;void nm_exc_thr(char[];=d/10,将不会提供此选项;&
a[i]=0,a);&iostream
提问者评价
谢谢这位大哥啊!!!!有点忒长了.呵呵。我想用枚举来代替abcdef呵呵。谢谢
其他类似问题
十六进制数的相关知识
其他3条回答
大哥啊,有函数的。你较这劲干啥啊
#include &iostream&#include &afx.h&void main(){ int a=0x100; CS temp.Format(&%d&,a); int b=atoi(temp); cout&&b; }注意:在Project-&Settings-&General-&Mircosoft Foundation Classes中,选择Use MFC in a Shared DLL然后我们就可以在Win32控制台下使用CString变量了,否则会出现编译错误。
printf(&请输入一个十进制整数:&);
scanf(&%d&,&num);
while(num&0)
p[count]=num
printf(&转换为二进制:
printf(&%c&,arr[p[i]]);
printf(&\n&);
rev2(void)
printf(&请输入一个十进制整数:&);
scanf(&%d&,&num);
while(num&0)
p[count]=num
printf(&转换为八进制:
printf(&%c&,arr[p[i]]);
printf(&\n&);
rev3(void)
printf(&请输入一个十进制整数:&);
scanf(&%d&,&num);
while(num&0)
p[count]=num
printf(&转换为十六进制:
printf(&%c&,arr[p[i]]);
printf(&\n&);
printf(&\n
1、十进制~二进制
2、十进制~八进制
3、十进制~十六进制\n&);
printf(&请选择功能:
scanf(&%d&,&select);
switch(select)
将调用转换函数
不用传值的函数
printf(&请输入
之间的数\n&);
}while(1);
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在C++中如何编出一个函数将整型数转化为字符串形式输出?_百度知道
在C++中如何编出一个函数将整型数转化为字符串形式输出?
123&但是中间要经过一系列的转换;123&最后输出的时候还是&quot即是输入&quot
函数原型为:itoa(int x);
*(p+i)=*(p+j);
xx=(int)(xx/
int bit=0;j,j--)
char uchar *itoa(int x){
char *p = new char[30];i++;
} while(xx);10),j=bit-i;i&
for (int i=0;
bit++;+x%10;0'
*(p+bit)=&#39
其他类似问题
按默认排序
其他3条回答
char **p-- = 0:char *
itoa ( int value,却没有保存转换后的char[]型;char *p = t + 31;while
( n &gt,要么用全局的.编译器扩展的itoa函数原型为,所以要么在函数内部动态申请!你传入的只有int型数据.---------------------char* func(char *dest感觉你的函数原型是不可取的; 0){*p-- = n % 10 + &#39,这些方法都不好;只是它是非标准的;0&#39,要不就用sprintf自己写个吧,如果非要实现这样的函数;= 10, p),要么用局部static, int n) {char t[32];}strcpy(dest,并不是所有的编译器都支持, int base );n /, 个人意见
sprintf详解 转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。格式化数字字符串sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa。如://把整数123 打印成一个字符串保存在s 中。sprintf(s, &%d&, 123); //产生&123&可以指定宽度,不足的左边补空格:sprintf(s, &%8d%8d&, 123, 4567); //产生:& 123 4567&当然也可以左对齐:sprintf(s, &%-8d%8d&, 123, 4567); //产生:&123 4567&也可以按照16 进制打印:sprintf(s, &%8x&, 4567); //小写16 进制,宽度占8 个位置,右对齐sprintf(s, &%-8X&, 4568); //大写16 进制,宽度占8 个位置,左对齐这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。sprintf(s, &%08X&, 4567); //产生:&&上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它:short si = -1;sprintf(s, &%04X&, si);产生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位):sprintf(s, &%04X&, (unsigned short)si);就可以了。或者:unsigned short si = -1;sprintf(s, &%04X&, si);sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。控制浮点数打印格式浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6 位数字,比如:sprintf(s, &%f&, 3.1415926); //产生&3.141593&但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表示打印的宽度,n 表示小数点后的位数。比如:sprintf(s, &%10.3f&, 3.1415626); //产生:& 3.142&sprintf(s, &%-10.3f&, 3.1415626); //产生:&3.142 &sprintf(s, &%.3f&, 3.1415626); //不指定总宽度,产生:&3.142&注意一个问题,你猜int i = 100;sprintf(s, &%.2f&, i);会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:sprintf(s, &%.2f&, (double)i);第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编排的结果是否正确。字符/Ascii 码对照我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII 字符。以下程序段把所有可见字符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):for(int i = 32; i & 127; i++) {printf(&[ %c ]: %3d 0x%#04X\n&, i, i, i);}连接字符串sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:char* who = &I&;char* whom = &CSDN&;sprintf(s, &%s love %s.&, who, whom); //产生:&I love CSDN. &strcat 只能连接字符串(一段以’’结尾的字符数组或叫做字符缓冲,null-terminated-string),但有时我们有两段字符缓冲区,他们并不是以 ’’结尾。比如许多从第三方库函数中返回的字符数组,从硬件或者网络传输中读进来的字符流,它们未必每一段字符序列后面都有个相应的’’来结尾。如果直接连接,不管是sprintf 还是strcat 肯定会导致非法内存操作,而strncat 也至少要求第一个参数是个null-terminated-string,那该怎么办呢?我们自然会想起前面介绍打印整数和浮点数时可以指定宽度,字符串也一样的。比如:char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};如果:sprintf(s, &%s%s&, a1, a2); //Don't do that!十有八九要出问题了。是否可以改成:sprintf(s, &%7s%7s&, a1, a2);也没好到哪儿去,正确的应该是:sprintf(s, &%.7s%.7s&, a1, a2);//产生:&ABCDEFGHIJKLMN&这可以类比打印浮点数的”%m.nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:sprintf(s, &%.6s%.5s&, a1, a2);//产生:&ABCDEFHIJKL&在许多时候,我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的,而不是静态指定的,因为许多时候,程序要到运行时才会清楚到底需要取字符数组中的几个字符,这种动态的宽度/精度设置功能在sprintf 的实现中也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,而实际的宽度或精度就可以和其它被打印的变量一样被提供出来,于是,上面的例子可以变成:sprintf(s, &%.*s%.*s&, 7, a1, 7, a2);或者:sprintf(s, &%.*s%.*s&, sizeof(a1), a1, sizeof(a2), a2);实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:sprintf(s, &%-*d&, 4, 'A'); //产生&65 &sprintf(s, &%#0*X&, 8, 128); //产生&0X000080&,&#&产生0Xsprintf(s, &%*.*f&, 10, 2, 3.1415926); //产生& 3.14&打印地址信息有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:sprintf(s, &%u&, &i);不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:sprintf(s, &%08X&, &i);然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:sprintf(s, &%p&, &i);我觉得它实际上就相当于:sprintf(s, &%0*x&, 2 * sizeof(void *), &i);利用sprintf 的返回值较少有人注意printf/sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度。如:int len = sprintf(s, &%d&, i);对于正整数来说,len 便等于整数i 的10 进制位数。下面的是个完整的例子,产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中,以逗号分隔开。#include #include #include int main() {srand(time(0));char s[64];int offset = 0;for(int i = 0; i & 10; i++) {offset += sprintf(s + offset, &%d,&, rand() % 100);}s[offset - 1] = '\n';//将最后一个逗号换成换行符。printf(s);return 0;}设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat 效率高,因为strcat 每次调用都需要先找到最后的那个’’的位置,而在上面给出的例子中,我们每次都利用sprintf 返回值把这个位置直接记下来了。使用sprintf 的常见问题sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。?? 缓冲区溢出第一个参数的长度太短了,没的说,给个大点的地方吧。当然也可能是后面的参数的问题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。?? 忘记了第一个参数低级得不能再低级问题,用printf 用得太惯了。//偶就常犯。:。(?? 变参对应出问题通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你欺她太甚了(编译器是obj 和exe 的妈妈,应该是个女的,:P)。strftimesprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:time_t t = time(0);//产生&YYYY-MM-DD hh:mm:ss&格式的字符串。char s[32];strftime(s, sizeof(s), &%Y-%m-%d %H:%M:%S&, localtime(&t));sprintf 在MFC 中也能找到他的知音:CString::Format,strftime 在MFC 中自然也有她的同道:CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。
把一个带符号的整数转换为一个ASCII字符串。数字字符的ASCII值有什么特点呢?它们是颠倒顺序排列的;字符”0”的ASCII值加上1等于”1”的ASCII值,以此类推。因此,数字字符的ASCII就等于这个数字加上字符”0”的ASCII值。(注意,字符”0”的ASCII值是一个不等于零的数值,而这个数值代表着字符”0”。)也就是说,只要用数字字符的ASCII值减去字符”0”的ASCII值就能得到该数字的整数表示形式。也许我不知道字符”0”的ASCII值是多少,但是编译器知道,只要写出代码” – ‘0’ ”,编译器就会把它解释为”减去字符串’0’的ASCII值”。反过来,数字加上字符”0” 的ASCII值就应该得到与之对应的数字字符(也就是把数字转为字符)了。#define MAX_DIGITS_INT 10
/*整数位数*/void IntToStr( int num ,char str[] ){ int i = 0, j = 0; int isNeg = 0;
/*整数位数最大为12位,包括负号*/ char temp[MAX_DIGITS_INT + 2]; if( num&0 ) {
num* = -1;
isNeg = 1; } do {
temp[i++] = (num%10) + '0';
num/ = 10; }while(num); if( isNeg )
temp[i++] = '-1'; while(i&0)
str[j++] = temp[--i]; str[j] = '\0';}
字符串的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 十六进制转十进制工具 的文章

 

随机推荐