八進制轉二進制…

2007-12-13 10:42 pm
八進制轉二進制…

50個字串中…
每字串有63個0~7隨機的數字...
我想將每個bit轉成3bit的0、1表示...
且宣告的型態為int…
將轉完的0、1值存入63*3大小的陣列...

想請教好心大大可以指點我一下…
怎樣用c語言來表示此程式…

感謝…

例如:
1==>0265473254.... 轉完後為==>000010110101100111011010101100....
2==>0261113254.... 轉完後為==>000010110001....................
3==>0265473254.... 轉完後為==>000010110101....................
4==>0265000054.... 轉完後為==>000010110101....................
5==>0265473254.... 轉完後為==>000010110101....................
.... . .
.... . .
.... . .
.... . .
50==>564643254.... 轉完後為==>101011100110100011010101100..........
更新1:

to逃跑的青蛙 ... 我是因為要寫ga的程式魯… 所以才問這些問題的>"< 因為編碼的問題我一直搞不懂… 且此程式也拖了很久魯… 想趕快將它完成魯… 因我的腦袋轉的不快…所以才會一直反覆問這些問題…歹勢丫

更新2:

to Jacob Lee... for (i=0; i<50; i++)  { for (j=0; j 這邊    printf("\n");  } 如果我想要將轉完後的值…分別用一個位元存它…這樣子…要怎麼辦? 你指點的部分好像是… 0==>"000"直接存入陣列中 那如果是這樣子的話… 0==>"0" "0" "0" 三個bit各別存… 這樣子程式要如何去表示它?

更新3:

to Jacob Lee大大… 因我的程式用意是... 將此字串中的==> ori[0][63]==>0265473254.... 轉完後為==>000010110101100111011010101100.... bin[0][189]==>000010110101100111011010101100....

更新4:

我的陣列大小設為 ori[50][63] ==>產生了50個字串,每個字串裡都有63個0~7隨機的數字 經由轉換後…我想要存放的陣列如下… bin[50][63*3]==>一樣有50個字串,但一個0~7之值都是對應3bit,我想將對應的3bit分別存放

回答 (3)

2007-12-14 7:28 am
✔ 最佳答案
指點一下很好;只要程式不好!

1. 宣告一個陣列: char *Oct[] = { "000", "001", "010", "011", "100", "101", "110", "111" };
2. 每個原始字串裡的每一個字元,改用上列 Oct 去印:
 for (i=0; i<50; i++)
 { for (j=0; j<strlen(Org[i]); j++)
    printf("%s", Oct[Org[i][j]]);
   printf("\n");
 }

哪不懂請再問。
加油!^_^


2007-12-14 10:30:10 補充:
轉完後的值…分別用一個位元存它??
不懂!

你是要用一個 變數,如:8 bytes 的 int 去存?
那就顯不出 8 進位啦!?

你是要用一個字串陣列去存?
那你要先宣告一堆 63*3 +1 的陣列!
每一個原始數分別進入對應的洞裡,最後(就是+1那個)補上 '\0' 就可以了。

如:
for (t=k=0; k<63; k++, t+=3)
strcmp( &Dst[t], Oct[Org[...] ]);
Dst[t] = '\0';

就可以了

2007-12-14 15:08:53 補充:
3 bits 還是 3 bytes?
3 bits 的話,它根本就是個 63*3 bits 二進位的整數!
只要用點小技巧,就可以把它存在 3 * 2個32bits 的整數裡!
問題是,你還是要把它轉換成 3 個 bits 一組後,才能用!

難道逃跑的青蛙說對了:你是要用來做編密?
那,我建議你用 bit field + union!
設定的程式會很煩鎖;但設定完後,資料量很小、且很好用!

2007-12-14 23:35:16 補充:
既然有人 post 程式,我也只好獻醜!
請參考我論壇裡的這篇 http://www.phpbbserver.com/graphicsparalle/viewtopic.php?t=177

它目前只有字串 → 字串版。
如果你要的真的是字串 → bits 版,請告訴詳細用途,以便做最好的結構建議。

如我最開始所說:只要程式不好!
若真的寫不出來,要小弟幫忙抓刀,請告知。

2007-12-15 00:22:09 補充:
對了,那裡目前雖是字串版,不過有兩個版在裡面:3*63bits 都連續 和 3 個 連續63bits 。

2007-12-19 07:08:05 補充:
我想,你說的〝我想將對應的3bit分別存放〞應該就是我寫的第二個版吧!
2007-12-15 2:04 am
//Power by Visual Studio 2005
//Download Site: http://www.microsoft.com/taiwan/vstudio/express/
//八進制轉二進制…
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAX_Length 63
int main(int argc, char* argv[]){
//=====START=====//
int i,j;
char str[MAX_Length+1]="",binary[MAX_Length][4]={""},tmp[4]="";
srand((unsigned)time(NULL));
for(i=0;i<MAX_Length;i++){
str[i]=rand()%8+'0';
itoa(str[i]-'0',tmp,2);
if(strlen(tmp)<3){
strcpy((tmp+3-strlen(tmp)),tmp);
for(j=0;j<(3-(int)strlen(tmp));j++){
tmp[j]='0';
}
}
strcpy(binary[i],tmp);
}
printf("String= %s\nCode=",str);
for(i=0;i<MAX_Length;i++){
printf(" %s%s",binary[i],((i+1)%10?(i==(MAX_Length-1)?"\n":""):"\n"));
}
//=====END=====//
system("PAUSE");
return 0;
}

2007-12-14 18:07:49 補充:
產生 1 個以上的字串和編碼:

請自行加入 for 迴圈和 str[50][MAX_Length+1]、 binary[50][MAX_Length][4] 來產生。
參考: 僅供參考(以上程式僅執行單一字串的編碼)
2007-12-14 3:49 pm
沁安:
這問題你問過很多次了,請問你現在是在做編解碼相關的作業嗎?
還是你正在修編解碼相關的課程。

P.S 只是好奇!!


收錄日期: 2021-04-27 17:14:43
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20071213000016KK04706

檢視 Wayback Machine 備份