當前位置:首頁 » 編程語言 » 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'。
啰里啰嗦的,不知道講清楚了沒有。