本篇文章给大家谈谈c语言stringtohex,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、c++如何将string 转换为char*2、设计一个程序,输入一个十进制整数,输出相应的十六进制数。设计一个函数实现数制转换。3、C++ 字符串转化为16进制 不要用sprintf4、toHexString
c++如何将string 转换为char*
1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符’\0’,而c_str()返回一个以‘\0’结尾的字符数组。
2、const char *c_str();
c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
比如:最好不要这样:
char* c;
string s=”1234″;
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:
char c[20];
string s=”1234″;
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
再举个例子:
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = “Hello World!”;
printf(“%s”,s.c_str()); //输出 “Hello World!”
拓展资料:
1.C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
2.C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
3.string 是C++中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。
4.不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象属于一个类,这个类有很多内置的特点,在操作方式,更直观,另外还有很多有用的成员函数。 string 的定义为:typedef basic_stringchar string;
5.char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。
设计一个程序,输入一个十进制整数,输出相应的十六进制数。设计一个函数实现数制转换。
//C语言实现:
#includestdio.h
void main()
{char b[]=”0123456789ABCDEF”;
long int n,x;
int i,a[40];
printf(“\n Please input n=”);
scanf(“%ld”,n);
x=n;i=0;
while(x0)
{a[i]=x%16;
x=x/16;
i++;
}
while(i0)
{printf(“%c”,b[a[i-1]]);
i–;
}
printf(“\n”);
}
对于大数转换可以用如下程序:
#include “Stdio.h”
#include “Conio.h”
char result[100];
int pos;
void change(int *num);
int main(void)
{
char str[100];
int num[100];
int bin[300]={0};
int quot[100],residue=0;
int i,j,k=0,suffix=0,index=0;
puts(“Input a decimal number:”);
gets(str);
for(i=0;istrlen(str);num[i]=str[i]-48,i++);
j=i-1;
while(j=0)
{
num[j]%2?(bin[k++]=1):(bin[k++]=0);
while(index=j)
{
residue+=num[index];
if(residue=2)
quot[suffix++]=residue/2;
else if(index)
quot[suffix++]=0;
residue=(num[index]%2)*10;
index++;
}
for(i=0;isuffix;num[i]=quot[i],i++);
j=suffix-1;
residue=suffix=index=0;
}
for(i=0;ik;change(bin+i),i+=4);
for(i=pos-1;i=0;printf(“%c”,result[i]),i–);
getch();
return 0;
}
void change(int *num)
{
if(num[3]==0num[2]==0num[1]==0num[0]==0)
sprintf(result+pos,”%c”,’0′);
if(num[3]==0num[2]==0num[1]==0num[0]==1)
sprintf(result+pos,”%c”,’1′);
if(num[3]==0num[2]==0num[1]==1num[0]==0)
sprintf(result+pos,”%c”,’2′);
if(num[3]==0num[2]==0num[1]==1num[0]==1)
sprintf(result+pos,”%c”,’3′);
if(num[3]==0num[2]==1num[1]==0num[0]==0)
sprintf(result+pos,”%c”,’4′);
if(num[3]==0num[2]==1num[1]==0num[0]==1)
sprintf(result+pos,”%c”,’5′);
if(num[3]==0num[2]==1num[1]==1num[0]==0)
sprintf(result+pos,”%c”,’6′);
if(num[3]==0num[2]==1num[1]==1num[0]==1)
sprintf(result+pos,”%c”,’7′);
if(num[3]==1num[2]==0num[1]==0num[0]==0)
sprintf(result+pos,”%c”,’8′);
if(num[3]==1num[2]==0num[1]==0num[0]==1)
sprintf(result+pos,”%c”,’9′);
if(num[3]==1num[2]==0num[1]==1num[0]==0)
sprintf(result+pos,”%c”,’A’);
if(num[3]==1num[2]==0num[1]==1num[0]==1)
sprintf(result+pos,”%c”,’B’);
if(num[3]==1num[2]==1num[1]==0num[0]==0)
sprintf(result+pos,”%c”,’C’);
if(num[3]==1num[2]==1num[1]==0num[0]==1)
sprintf(result+pos,”%c”,’D’);
if(num[3]==1num[2]==1num[1]==1num[0]==0)
sprintf(result+pos,”%c”,’E’);
if(num[3]==1num[2]==1num[1]==1num[0]==1)
sprintf(result+pos,”%c”,’F’);
pos++;
}
C++ 字符串转化为16进制 不要用sprintf
void StringToHex(char *in,char *out)
{
int high,low;
while(*in)
{
high=(*in)4;
low=(*in)0xF;
*(out++)=high9 ? high-10+’a’ : high+’0′;
*(out++)=low9 ? low-10+’a’ : low+’0′;
in++;
}
*out=’\0′;
}
toHexString
修改了一处
msg += “\\u” +Integer.toHexString((int)chars[i]);后面加入了” “
msg += “\\u” + Integer.toHexString((int) chars[i]) + ” “;目的是为了方便字符串的划分(用\\u划分字符串貌似不行)如果对这部有异议,可以选择其它划分字符串的方法.
添加了一个方法hexToString,用来将规定格式的句子还原为最初的字符串..按楼主题目的要求就是为了将十六进制数还原为”中华人民共和国”
public class strings {
static String msg = “”;
public static void main(String[] args) {
msg = tohex();
System.err.println(msg);
String result = hextoString(msg);
System.err.println(result);
}
public static String tohex() {
String test = “中华人民共和国”;
char[] chars = test.toCharArray();
for (int i = 0; i chars.length; i++) {
// 为了方便字符串划分,在每个十六进制数结尾加上了空格
msg += “\\u” + Integer.toHexString((int) chars[i]) + ” “;
}
return msg;
}
public static String hextoString(String msg) {
// 下面三句是利用正则表达式,用空格作为分隔符
// 获得每个”\\u”+十六进制数子串,并保存与strs数组
Pattern pattern;
pattern = Pattern.compile(” “);
String[] strs = pattern.split(msg);
char[] foreString = new char[strs.length];
String hexNum;
for (int i = 0; i strs.length; i++) {
hexNum = strs[i].substring(2);// 获得”\\u”后面的十六进制数
int value = Integer.parseInt(hexNum, 16);// 将其转化为十进制数
foreString[i] = (char) value;
}
return new String(foreString);
}
}
关于c语言stringtohex和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。