[問題] 新手請教0x?? 這個東西

看板C_and_CPP (C/C++)作者 (超愛玉琳哥^^)時間14年前 (2011/08/01 12:03), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) NiosII C/C++ 問題(Question): 有一筆資料都是0x開頭的資料 (0x00,0x00,0x00,0x02,0x40,0x40,0x7f,0x7f,0xe0,0x08,0x40,0x40,0x08..... 我知道0x代表的意思是他是一個十六進制的資料 (? 我那個資料代表的意思是一個點陣圖 我現在想要把它轉成一個二進制資料<1001001010101 然後存在一個二維陣列 這樣他就會拼出一個圖型 可是我現在被0x這個東西搞得很糊塗 以前沒接觸過這個 如果他的格式是0101(hex)我還可以用數學的方法把它算成二進制 可是他前面加一個0x我就不太曉得要怎麼下手了 是有什麼函式可以把他直接轉二進制? 還是用什麼讀取方法可以把它讀出一個二進制的資料來存? 麻煩各位教一下了>.< 我用的是純C語言 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.61.130 ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:06)

08/01 12:08, , 1F
字串處理過再轉吧
08/01 12:08, 1F

08/01 12:11, , 2F
如果全部都是hex可以用scanf("%x"),他可以搞定0x
08/01 12:11, 2F

08/01 12:12, , 3F
不過如果混在一起就要先當字串讀近來判斷頭兩byte是不是0x
08/01 12:12, 3F

08/01 12:12, , 4F
再丟進sscanf看要%d或%s
08/01 12:12, 4F
我查了一下scanf好像只能輸出在螢幕上? 可是我要存在別的陣列中耶 ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:21)

08/01 12:22, , 5F
sscanf <- 有兩個 s
08/01 12:22, 5F

08/01 12:22, , 6F
而且 scanf 也不會是 "輸出" 的
08/01 12:22, 6F

08/01 12:24, , 7F
不過你的資料是一個檔案,裡面寫 0x??,0x??,0x??...這樣?
08/01 12:24, 7F
const unsigned char uc2_73fe[] = {0x00,0x00,0x00,0x02,0x40,0x40,0x7f....) 裡面都是十六進制的格式 用記事本開的 ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:29)

08/01 12:30, , 8F
如果是 const unsigned char 的話根本不用轉啊...
08/01 12:30, 8F
我想我應該只會擷取裡面的陣列資料 資料型態會再改 因為這是軟體跑出來的東西 ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:33) 假如 我宣告兩個整數 int a=0x11 ,b; scanf(???, b); 我???的地方應該要怎樣打好呢? 上面推文說有可以用%x 可是要怎麼把a傳給%x? ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:37)

08/01 12:38, , 9F
http://pastie.org/2302031 不知道你要的是不是這樣
08/01 12:38, 9F
跟這個99%一樣 可是我不太明白為什麼它的mask是0x80 然後這個 mask >>= 1;的作用是? 好像差一步了qq ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 12:45)

08/01 12:47, , 10F
你把 0x80 的二進位寫出來,然後想想看 >>=1 做了什麼事
08/01 12:47, 10F
我大概看懂了!謝謝J大 感激不盡!Q_Q ※ 編輯: uhmeiouramu 來自: 114.39.61.130 (08/01 13:01)

08/01 17:36, , 11F
你就別想太多 就當十進制轉二進制就好了...
08/01 17:36, 11F

08/01 18:04, , 12F
而且想像一下 他是bit單位的array
08/01 18:04, 12F
文章代碼(AID): #1EDYMfyq (C_and_CPP)
文章代碼(AID): #1EDYMfyq (C_and_CPP)