[問題] 請問如何將 非int型態資料 轉成 int ??

看板C_and_CPP (C/C++)作者 (誰人未嘗自以為)時間16年前 (2009/03/03 21:13), 編輯推噓6(6023)
留言29則, 3人參與, 最新討論串1/1
因為我要做的是資料處理 樣本有兩種, 一種是 8 bits per sample, 一種是 16 bits 以下是我的 code ifstream in(file_name,ios::binary); char c; int temp; int frequency[256]={0}; for(int i=0;i<file_length;i++){ temp=c; //強制將 char 放進 int 裡 temp=temp+128; frequency[temp]++; } 這程式是要統計各個值出現的次數 我原先使用了 int n=atoi(c); 發現並不能 work (不知道是 atoi 不能吃 char 型態還是???) 之後我發現 char 可以直接存進 int 裡 所以才寫了下半部的迴圈, 能正確統計出各個值出現的字數 這在處理 1 byte 的 sample 的時候還可以 但在處理 2 bytes 的 sample時 要怎麼才能將 2 bytes 的資料存入 int 內呢 ??? 我能想到的作法只有 先抓 1 byte 存入 int a 後 將 a 往左 shift 8 bits 之後再抓 1 byte 放入 int b 之後 a+b 再加上 2的15次方 (將所有值都轉為非負數) 可是這樣的作法好像太過麻煩~ 加上這樣的形態轉換問題其實還蠻常碰到的 想請教各位大大有沒有比較好的作法 , 謝謝^^! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.199.90

03/03 21:16, , 1F
unsigned short s; in.read((char*)&s, 2);
03/03 21:16, 1F

03/03 21:21, , 2F
想請問,原先我也有想到用unsign看是不是可以省去 +128
03/03 21:21, 2F

03/03 21:21, , 3F
可是這樣是否會有值錯亂的問題??
03/03 21:21, 3F

03/03 21:22, , 4F
因為在 char 中原先 msb 是 1 的原本應該是 負值
03/03 21:22, 4F

03/03 21:22, , 5F
可是在存到 unsigned 後 似乎會變成正數,且比原先 msb
03/03 21:22, 5F

03/03 21:22, , 6F
是 0的還大
03/03 21:22, 6F

03/03 21:24, , 7F
感謝 F 大多次幫我解決困難XDDDD
03/03 21:24, 7F

03/03 21:25, , 8F
會不會錯亂要看那個值對你的意義@@
03/03 21:25, 8F

03/03 21:26, , 9F
嗯...因為我是想保持住原有的大小順序,之後才能轉回來
03/03 21:26, 9F

03/03 21:27, , 10F
這樣的話除了加上2的power之外, 還有好的做法嗎 @@
03/03 21:27, 10F

03/03 21:30, , 11F
如果只是要signed/unsigned互轉的話直接cast就好
03/03 21:30, 11F

03/03 21:31, , 12F
結果會是一樣的.. 順序其實不重要
03/03 21:31, 12F

03/03 21:32, , 13F
這樣我了解了!!! 感謝 F大 ^^
03/03 21:32, 13F

03/03 21:35, , 14F
int n = atoi(c.str()); 試試看,我之前都是這樣處理
03/03 21:35, 14F

03/03 21:36, , 15F
打錯,是int n = atoi(c.c_str());
03/03 21:36, 15F

03/03 21:38, , 16F
然後記得要include string.h 或是cstring
03/03 21:38, 16F

03/03 21:41, , 17F
馬上試試!
03/03 21:41, 17F

03/03 21:45, , 18F
god大我試了不成功耶Q_Q c_str 跟 str 都沒有宣告
03/03 21:45, 18F

03/03 21:46, , 19F
我有 include cstring 了, string.h 也試過
03/03 21:46, 19F

03/03 21:46, , 20F
不知道是不是 Dec C++ 的問題
03/03 21:46, 20F

03/03 21:48, , 21F
沒啊....我都很正常啊
03/03 21:48, 21F

03/03 21:49, , 22F
可能是我的版本太舊了XDD 4.9.9.2
03/03 21:49, 22F

03/03 21:50, , 23F
還是說atoi一定要字串型態才能轉, char 不行0.0
03/03 21:50, 23F

03/03 21:50, , 24F
單抓一個 char 的話字尾沒有 \0 ~
03/03 21:50, 24F

03/03 21:53, , 25F
sorry,atoi(c.c_str()) 適用於string
03/03 21:53, 25F

03/03 21:53, , 26F
沒注意到你的c是char型態
03/03 21:53, 26F

03/03 21:54, , 27F
XDDDD 感恩感恩
03/03 21:54, 27F

03/03 21:55, , 28F
只是每次處理圖片時要把 char 轉成 int 都讓我很頭痛
03/03 21:55, 28F

03/03 21:55, , 29F
今天學到不少 XDDD
03/03 21:55, 29F
文章代碼(AID): #19hIpb7T (C_and_CPP)
文章代碼(AID): #19hIpb7T (C_and_CPP)