要写一个STRING 转16进制的代码,网上抄了一个看不大懂,谁能帮解释一下,用//说明在旁边每句,谢谢

作者&投稿:闫贞 (若有异议请与网页底部的电邮联系)
要写一个STRING 转16进制的代码,网上抄了一个看不大懂,谁能帮解释一下,用//说明在旁边每句,谢谢~

第一个不明白:将str的第一个字符赋值给c
第二个不明白:将c中的值转为十六进制,并且在ss末位加上这个十六进制值,相当于ss存储了str转化为十六进制的值
第三个不明白:将str的第一个字符删除,进行下一次循环
不断循环下去,str的值为空时跳出循环

1.字符是ASCII编码,数字0~9的编码是0x30~0x39,所以,将数字0~9加上0的ASCII编码0x30就是0x30~0x39了,就转换成了与它们对应的字符。程序中加'0',这是字符写法,就是0x30。C/C++允许这样写并与整形数运算。
2.你的代码对正数的处理是正确的,但对负数的处理有比较大的问题:对十进制数先变成了十六进制字符,而后才对“字符”求反加1求补码,这是错误的,求补只能对数据进行;而且加1会有进位发生的,但你只加在了最低位,所以错的地方比较多。改了一下,原来语句也留着,只是挂起来了,这样以便你对照。如下:
int main(void){/*主程序*/
int data,i=0,k,dx=1;
char a[16] = {0};
printf("输入一个十进制数");
scanf("%d",&data);
printf("OX");
if(data<0)//计算负数的十六进制
{
do
{
//switch((abs(data))%16)//每次循环会得到一个十六进制上的一个数
//{
// case 10:a[i] = 'A';break;//
// case 11:a[i] = 'B';break;//
// case 12:a[i] = 'C';break;//
// case 13:a[i] = 'D';break;//
// case 14:a[i] = 'E';break;//
// case 15:a[i] = 'F';break;//
// default:a[i] = data%16+'0';//为何一个整数+'0',等于字符?
//}
a[i]=(abs(data))%16;
data=(abs(data))/16;
i++;
}while(data);
k=i;
//i-=i;//求出a[0]
for(i--;i>=0;i--) a[i]=~a[i]&0xF;
for(i++;i<k;i++){
if(a[i]==15){//解决加1时的进位问题并变为字符
a[i]+=dx;
a[i]='0';
dx=1;
}
else{//无进位时的加1与转换为字符
a[i]+=dx;
if(a[i]>=0 && a[i]<10) a[i]+='0';
else a[i]+=0x37;//printf(":%c ",a[i]);
dx=0;
}
}
//while(!i)//数组下标最低位存着此数最低位的十六进制数,对最低位按位取反+1
//{
// a[i] = ~a[i]+1;
// printf("%c",a[i]);
// break;//计算一次跳出
//}
//while(k) //对数组下标i最后存着的数按位取反
//{
// printf("%c",~a[k]);
// break;
//}

while(k!=0) printf("%c",a[--k]);//这里改成前--因为多了
printf("
");
return 0;
}
if(data>=0)
{
do
{
switch(data%16)
{
case 10:a[i] = 'A';break;
case 11:a[i] = 'B';break;
case 12:a[i] = 'C';break;
case 13:a[i] = 'D';break;
case 14:a[i] = 'E';break;
case 15:a[i] = 'F';break;
default:a[i] = data%16+'0';
}
data/=16;
i++;
}while(data);
while(i>-1)
printf("%c",a[--i]);//这里改成前--因为多了
printf("
");
}
return 0; //这里也要加一个返回语句
}
下面再提供一个按你的思路写的比较精简一些的,供参考。
void main(void){/*主程序*/
int data,i=0,k,dx=0,dxx=0;
char a[16] = {0};
printf("输入一个十进制数");
scanf("%d",&data);
printf("OX");
if(data<0) dx=dxx=1;//设立负数标记
data=abs(data);
do{//变成十六进制数.但不是字符
a[i++]=data%16;
data=data/16;
}while(data);
k=i;

if(dxx==1)//负数时求反
for(i--;i>=0;i--) a[i]=~a[i]&0xF;

for(i=0;i<k;i++){//负数时加1与变为十六进制字符
if(a[i]==15){//解决进位情况
a[i]+=dx;
a[i]='0';
dx=dxx;
}
else{//无进位的情况
a[i]+=dx;
if(a[i]>=0 && a[i]<10) a[i]+='0';
else a[i]+=0x37;//
dx=0;
}
}
while(k!=0) printf("%c",a[--k]);//
printf("
");
}

function strToHexStr(str:string):string; //函数声明 str 要转换的字串
var //定义变量
c:char;
ss:string;
i:integer;
begin
while str<>'' do begin //要转换的字串非空的时候执行操作
c:=str[1]; //读取字串第一个字符
ss:=ss+format('%0x',[ord(c)]); // ord(c) 将c转成16进制 format('%0x' 这个函数是强行定义转换后的格式为16进制
delete(str,1,1); //将str中的第一位删除(这样的话第二个字符就变成第一位..一直到删除完毕退出循环)
end;
strtohexStr:= ss; //将转换后的16进制字符串变量ss 赋回给函数
end;


编写函数实现统计一个字符串中每个小写字母出现的次数。
1、文件--》新建--》项目。2、选择为:控制台应用程序--》命名:统计一个字符串中每个小写字母出现的次数--》确定。3、确定后系统生成的代码。4、先写一个字符串用于测试。5、使用Dictionary集合然后循环判断测试代码。6、程序运行测试成功后显示每种字母出现的次数。

java 怎样从一个string字符串中判断某个字母出现多少次
int count = 0;\/\/遍历数组的每一个元素,也就是字符串中的每一个字母 for(int i=0;i<temp.length; i++){ \/\/如果字母等于c if(temp[i].equals('c')){ \/\/计数器加一 count ++;} } 第二种:int count=0;String str =""\/\/你要测试的字符串 \/\/index为字符串中第一次出现c的位置...

输入5种水果的英文名称,用java编写一个程序,输出这些水果名称按照字典出 ...
一、思路:1、建立一个String数组,用来存储用户输入的水果名字。2、按字典出现的先后顺序即比较字符串大小。可以使用到String对象的compareTo()方法。3、对比大小后,升序输出。二、实现:1、定义输入水果名字的个数,用来确定数组的大小,修改此值可以修改数组的大小。2、用户输入,用循环实现接收,并...

java中如何把一个String类型的变量转换成double型的?
Double.parseDouble(String类型变量)例如定义String变量A为“10”,将String转化为Double变量。我写出来了,你可以看一下,如下图:

输入5种水果的英文名称,用java编写一个程序,输出这些水果名称按照字典出 ...
一、思路:1、建立一个String数组,用来存储用户输入的水果名字。2、按字典出现的先后顺序即比较字符串大小。可以使用到String对象的compareTo()方法。3、对比大小后,升序输出。二、实现:1、定义输入水果名字的个数,用来确定数组的大小,修改此值可以修改数组的大小。2、用户输入,用循环实现接收,并...

写一个程序,它先接收一个字符串,然后统计并显示其中数字字符的个数...
public static void main(String[] _s) { System.out.println("输入字符串后回车:");Scanner input = new Scanner(System.in);String s = input.nextLine();System.out.println("接收到字符串:"+s);System.out.println("数字字符个数:"+s.replaceAll("\\\\D","").length());System.out....

C++一道编程哪错了 编写一个程序,输入一个字符串,从字符串中提取有效的...
本来想改一改,改着改着改得太多,重写一个供参考——代码资料:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.include <string> include <iostream> include <iomanip> using namespace std;int function1(int &i, string s){ int sum;for(sum=0;s[i]>='0' && s[i]<=...

java中 String a=new String("1"+"2")创建了几个对象
2个:a值和a引用地址,也叫引用对象。引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在文字池中,文字池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==...

编写一个函数,输入一行字符,将此字符串中最长单词输出。
include<stdio.h> include<string.h> void longword(char s[],char t[]);\/\/定义最长单词函数 int main(){ char str[30],lg[20];gets(str);\/\/输入一行字符 longword(str,lg);\/\/调用最长单词函数 puts(lg);\/\/输出最长单词 return 0;} \/\/最长单词函数 void longword(char s[],char t...

java中String是什么?
仔细看:解释的不好,还请指点!String他很特殊,Java为他单独设计了一些方法,你不要和其他类混淆!(是被Java封装好了的)知道构造原理以后,他其实也很简单,我先说特殊地方,就是双引号 String s="你好";此刻s指向的就是一个字符串对象,是对象!与你平时写的new很类似,只不过他这个对象放在常量池里面!

丛台区13971428529: 哪位帮我写个string互相转换16进制的函数
止疫元坦: 16进制转回来的:function hexToStr(str){ var arr = str.split('\\u'); arr.shift(); var _str = ''; for(var i=0;i<arr.length;i++){ arr[i] = parseInt(arr[i],16); _str += String.fromCharCode(arr[i]) } return _str;}

丛台区13971428529: 二进制转换成16进制 java string -
止疫元坦: 2进制转16进制还是很好处理的.2进制转16进制,实质上就是4位2进制刚好是一个16进制,注意这么一点就行了.可以先建一个string->string的map "0001" -> "1" , "0010" ->"2" ,... "1010" ->"a", "1011" -> "b" , "1100" ->...

丛台区13971428529: 如何将一个String转换成16进制的数串呢?譬如我想把name
止疫元坦: 改成这样就可以了: char[] ai={'O','K'}; int[] m={0,0}; for(int i=0;i toHexString(m[i]); System.out.println(str1); } ---------------- 最大的问题是这一句 String str1[i]=Interger....

丛台区13971428529: string怎么转16进制进行与运算 -
止疫元坦: #include <stdio.h> #include <stdlib.h> int main(void) {unsigned long n=strtoul("123ABC",NULL,16);printf("%lX\n",n);return 0; }

丛台区13971428529: C++ string2进制转16进制要怎么做 -
止疫元坦: #include using namespace std; class Number { private : int num; public : Number(int n = 0) { num = n; } Number(char xnum[],const int base); // 将base进制的数字串转换为int int GetDec()const; char *GetBin(char bin[]) const; char *GetOctal(char oct[...

丛台区13971428529: 怎么把一个字符串转换成16进制数据 -
止疫元坦: #include<stdio.h> int fun(char *s,int n) { int r=0;while ( *s ) {r*=n;if ( *s>='0' && *s<='9' ) r+=*s-'0';else if ( *s>='A' && *s<='Z' ) r+=*s-'A'+10;else if ( *s>='a' && *s<='z' ) r+=*s-'a'+10;s++;}return r; } void main() { int x; char s[80];scanf("%s",s); ...

丛台区13971428529: c++ 如何将string类型的二进制转换为16进制? -
止疫元坦: 用影射.二进制每四位代表一个十六进制.如0000=0 1111=F 代码的话.就给个简单的吧.string test; cin>>test; int len=test.length(); len=len%4; while(len<4) { test="0"+test; len++; } char a[]={'0','1','2',……'F'};//这里我省略了.len=test.length(); int sum=0; for(int i=0;i<len;i++) { sum+=test[i]-'0'; if(i&&i%4==0){cout<<a[sum];sum=0;} } cout<<endl;//没编译过,你自己试下

丛台区13971428529: 如何将一个String转换成16进制的数串呢? -
止疫元坦: 可以把你的字符串,用split(字符串,"") 会生成一个数组.然后可以循环,通过下标对每个字符处理.然后转换后的转换为字符串,再拼接希望能帮到你

丛台区13971428529: 求一个可以把字符串转为16进制的函数 -
止疫元坦: #include <stdio.h>#include <string.h>unsigned long f(char* str){ unsigned long var=0; unsigned long t; int len = strlen(str); if (var > 8) //最长8位 return -1; strupr(str);//统一大写 for (; *str; str++) { if (*str>='A' && *str <='F') t = *str-55;//a-f之间的ascii与...

丛台区13971428529: C语言中如何将某个字符串转为16进制ascii码并输入到另一个字符串中? -
止疫元坦: 用sprintf()函数就可以了. sprintf(*dst,"%x",2113*src) dst:目标字符5261串 scr:源字符串 我回去试了一下,不行 一般的4102sprintf(*dst,"%s",*src)能把src转换成指定的格式 可是sprintf(*dst,"%x",*src)时,*dst存了地址1653!·修改了...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网