關於itoa的格式 |
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
各位大大:
itoa此一函式的用法 在我的程式內我誤會他很久了 所以今天把他整理一下跟各位分享 首先如下: [code cpp] int text=8; char texts[8]={0},temps[8]={0}; itoa(text,texts,2); //會存成 1 0 0 0 '\0' '\0' '\0' '\0' 由陣列0開始填入值 不足的位數以/0補滿 [/code] 第一點 輸出的格式會把沒有用到的位數以 '\0' 表示 第二點 依照二進制的除法由上而下的結果填入陣列 如上例:整數8會以此填入陣列內 [0] = 1 [1] = 0 [2] = 0 [3] = 0 [4] = '\0' [5] = '\0' [6] = '\0' [7] = '\0' 就是這個格式的問題讓我的程式一直跑不出來 因為我的想法就是 如果陣列第0個位置為1的話 也就是[0]=1; 所存放的數值應該是2的零次方 也就是等於1 但是itoa的格式並非我所想像 照原本itoa的格式當我將整數8轉成2進制 經過無失真編碼運算後 用我所說的方式再轉成十進制 質會等於整數1 也正因為是無失真編碼 但是輸出結果卻失真了 回頭找原因才發現是itoa的格式與我所設定的不同 如果有和本人一樣困擾的各位 也請參考小弟以下的作法 也請各位大大提出改進指教 小弟是學影像處理 所以字串長度皆宣告成8 [code cpp] void itoanorm(char *texts) //將itoa的格式正規化 { char temps[8]={0}; int fleg=0; for(int k=8;k>=0;k--) { if(texts[k]=='\0') { temps[k]='0'; } else { temps[k]=texts[fleg]; fleg ; } } for(k=0;k<9;k ) { texts[k]=temps[k]; } } [/code] 如此一來 原本格式 : 1 0 0 0 '\0' '\0' '\0' '\0' 將會改成此格式 : 0 0 0 0 1 0 0 0 給各位參考
------
恩... 編輯記錄
istillloving 重新編輯於 2010-08-17 15:03:14, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:04:07, 註解 無‧ istillloving 重新編輯於 2010-08-17 15:22:16, 註解 無‧ istillloving 重新編輯於 2010-08-17 15:40:22, 註解 無‧ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
函式的定義與說明如下
char *itoa(int value, char *string, int radix); itoa converts value to a null-terminated string and stores the result in string. 所以本來就不會是您預期的結果 ^^ 不需要正規化那麼複雜吧^^? const int len = 8; BYTEval = 0x08; BYTE out[len] = {0x00}; for (int i=0; i < len; i ){ if (val&0x01){ out[i] = 1; } val>>=1; }
out裡面就是您要的結果
編輯記錄
taishyang 重新編輯於 2010-08-17 16:43:03, 註解 無‧
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
您好:
請問這是向右shift一個位元嗎 " val>>=1; " ===================引 用 taishyang 文 章=================== 函式的定義與說明如下 char *itoa(int value, char *string, int radix); itoa converts value to a null-terminated string and stores the result in string. 所以本來就不會是您預期的結果 ^^ 不需要正規化那麼複雜吧^^? const int len = 8; BYTEval = 0x08; BYTE out[len] = {0x00}; for (int i=0; i < len; i ){ if (val&0x01){ out[i] = 1; } val>>=1; }
out裡面就是您要的結果
------
恩... |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |