当前位置:首页 » 编程语言 » c语言16进制8进制转义字符
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言16进制8进制转义字符

发布时间: 2022-07-28 10:16:31

c语言如何把十六进制转换成八进制

此题涉及到大数据处理(输入的16进制数最大可能到100000位),所以不能用常规的除8模8方法做,思路:

  1. 先将十六进制转为二进制表示

  2. 再将二进制转换为八进制表示,然后输出

具体程序实现如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*将十六进制字符转换为数值*/
intget_value(constcharc)
{
if(c>='0'&&c<='9')
returnc-'0';
else
returnc-'A'+10;
}

intmain()
{
char*input,*output,*output2,*ptr;
intn,i,j,tmp,len;

scanf("%d ",&n);
input=(char*)malloc(100000+1);/*储存输入的十六进制数*/
output=(char*)malloc(100000*4+4);/*储存过度用的二进制数*/
output2=(char*)malloc(100000*3+3);/*储存最终结果八进制数*/

while(n--)
{
gets(input);
len=strlen(input);
ptr=input;
j=0;
/*首先将十六进制转换为二进制,1位十六进制数对应4位二进制数*/
while(*ptr)
{
tmp=get_value(*ptr);
output[j++]=((tmp>>3)&0x1);/*bit3*/
output[j++]=((tmp>>2)&0x1);/*bit2*/
output[j++]=((tmp>>1)&0x1);/*bit1*/
output[j++]=((tmp>>0)&0x1);/*bit0*/
ptr++;
}

/*将二进制转换为八进制,3位二进制数对应1位八进制数,从低位开始转*/
/*j为二进制数组下标,每个循环减3*/
/*i为八进制数组下标,每个循环减1*/
j=len*4-1;
i=(len*4+2)/3-1;
output2[i+1]='';
for(;j>=0;)
{
if(j>=2)
output2[i--]=(output[j-2]<<2|output[j-1]<<1|output[j])+'0';
elseif(j==1)
output2[i--]=(output[j-1]<<1|output[j])+'0';
elseif(j==0)
output2[i--]=output[j]+'0';

j-=3;
}
/*八进制数组的有效下标从i+1开始*/
j=i+1;
/*去除前导的'0'字符(可能会影响判定结果)*/
while(output2[j]=='0')j++;
/*如果整个字符串都是'0',则直接输出结果'0',否则从首位非'0'开始输出*/
if(output2[j]=='')
printf("0 ");
else
printf("%s ",&output2[j]);
}

free(input);
free(output);
free(output2);

return0;
}

㈡ c语言十六进制转换为八进制

手工还是编程?
手工可以这样:把16进制数从左至右按16进制各位上的“数”代表的二进制依次写出来,比如0x9B8D7F6543D为,再从右至左每3位分开(最左端不足3位时在前面用0补齐)010,011,011,100,011,010,111,111,101,100,101,010,000,111,101。最后用八进制符号对应写出来就可以了——233432775452075。十六进制数0x9B8D7F6543D的八进制就是233432775452075!
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
void dtob(char *p,int n){
static i=0;
if(n) dtob(p,n/2);
if(n) p[i++]=n%2+'0';
}
int dtoo(char *p){
int x,i,k=strlen(p)%3;
for(x=i=0;i<k;(x*=2)+=p[i++]-'0');
for(;p[i];i+=3)
(x*=10)+=((p[i]-'0')<<2)+((p[i+1]-'0')<<1)+p[i+2]-'0';
return x;
}
void main(void){
int n;
char a[33]="";
printf("Type a hexadecimal number...\nn=0x");
scanf("%X",&n);
dtob(a,n);
printf("The binary is %s.\n",a);
printf("The octal %d.\n",dtoo(a));
}

㈢ C语言中‘x41'是十六进制,那么八进制和十进制怎么表示

'\x41'是用16进制转义字符来表示‘A’字符,也就是是10进制的65
八进制 转义表示为:'\101'
转义字符只能由上面两种进制表示。

㈣ C语言 '\102'是8进制 '\x42'是16进制 问:10进制是怎么样的

转义字符只有8进制和16进制内码,没有10进制项。其中8进制以\开头,16进制以\x开头
你如果定义一个字符,要用10进制内码的话,可以直接使用10进制整数来赋值
比如
char
ch=48
它等同于char
ch='\x30'
或char
ch='\060'

char
ch='0'
都能使字符变量ch存放数字’0‘
该题应选B,八进制66表示十进制54,内码54的字符是数字'6',而不是大写字符
另外,转义字符表示八进制和16进制的语法跟定义八进制和16进制的整数型数值(注意数值和字符是完全不同的概念)是完全不同的
定义整数型数值常量的时候,八进制必须在最前面写上0(也就是必须以0开头),如int
a=060
十六进制必须在最前面写上0x(必须以0x开头),如int
a=0x30
这两者都等同于int
a=48

㈤ C语言的十六进制和八进制怎么转换成十进制,求详细的描述,比如八进制101为什么会转化成十进制65

十六进制和八进制转换成十进制,就是对应位值乘以位权,八进制101转化成十进制就是1*8^2 + 0*8^1 + 1*8^0 = 64+0+1=65
十六进制同理
十六进制和八进制在C语言中的表示方法带上转义字符"\"这是转义字符的表示方法之一(共三种表示方法,可以看书)

十六进制是开头用0x

㈥ 为什么转义字符里面需要存在十六进制和八进制

因为C语言的只有八进制和十六进制数字转义符,没有 10 进制数字转义符!!·
形为’\ddd’的三位是八进制转义字符;形为 ’\xdd’的两位十六进制转义字符。
为什么没有10进制,只有8,16进制,可能是因为8,16进制与二进制转换更方便吧。

㈦ 在C语言中,转义字符中往往有八进制,十六进制的数字取转义字符,有没有十进制的啊谢谢!

没有啊!因为程序是和机器打交道的。用10进制很不方便的。而且用16进制8进制表示更容易。比如FF,你想用10进制表示就会很麻烦,没有规律

㈧ C语言8进制和16进制数及转义字符的问题

2.b
3.-0fff 这个不对 应该是0Xfff

㈨ C语言把16进制数转化为8进制数求代码

字符串格式的16进制数,输出为8进制数,参考代码如下:
#include<stdio.h>
void DectoOct(int n, int flag)
{
int t;
if(n==0) {
if(flag==1) printf("0");
return;
}
t=n%8;
DectoOct(n/8,0);
printf("%d",t);
}
void HexToOct(char b[])
{
int i=0,t=0;
char ch;
while((ch=b[i])!=0){
if(ch>='0'&&ch<='9')
t=t*16+ch-'0';
else if(ch>='A'&&ch<='F')
t=t*16+ch-'A'+10;
else if(ch>='a'&&ch<='f')
t=t*16+ch-'a'+10;
else return -1;
++i;
}
DectoOct(t,1);
}
int main()
{
HexToOct("1A");
return 0;
}

㈩ C语言转义字符问题

字符以其ASCII码表示,ASCII码由8位2进制数字构成。这8位二进制数表示成16进制时,需要2位16进制数字。比如'\n',其值为10,要写成16进制转义字符的形式,就是'\x0A'。而要是用8进制形式的转义字符来表示一个字符,其实就是要用8进制表示一个八位的二进制数(一个字节)。八位二进制数每三个一组对应一个八进制数,最多可以有三组。而且最高位不能超过3(二进制的011)。所以二进制的11111111表示成八进制的转义字符时,为'\377',表示成十六进制的转义字符时,为'\xFF'。
啰里啰嗦的,不知道讲清楚了没有。