[問題] 面試遇到readByte

看板C_and_CPP作者 (GZ)時間13年前 (2011/05/14 08:12), 編輯推噓20(20028)
留言48則, 11人參與, 最新討論串1/3 (看更多)
面試遇到的問題, 我當時整個人傻掉 他要我舉出下列程式隱藏的問題 bool ProcessEvilInput::onDecode(SkStream* stream, SkBitmap* bm, SkBitmap::Config pref, Mode mode) ... int width = readByte(buf, 6 + i*16); int height = readByte(buf, 7 + i*16); if (stream->read((void*)buf, length) != length){ return false; } int offset = read4Bytes(buf, 18 + i*16); int bitCount = read2Bytes(buf, offset+14); switch (bitCount) { case 1: case 4: c = SkBitmap::kIndex8_config; break; case 8: case 24: case 32: c = SkBitmap::kARGB_8888_config; break; default: RETURN_ERROR(("Image with %d not supported\n", bitCount)); continue; } ... } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 128.220.159.20

05/14 11:26, , 1F
..............
05/14 11:26, 1F

05/14 11:40, , 2F
現在是什麼狀況?
05/14 11:40, 2F

05/14 12:04, , 3F
隱藏的問題1,八成是沒文件沒註解吧。
05/14 12:04, 3F

05/14 12:10, , 4F
變數怎麼來的 ? 我猜想考 input buf check 吧
05/14 12:10, 4F

05/14 12:18, , 5F
"Image with %d not supported\n" 我猜是文法不夠正確
05/14 12:18, 5F

05/14 12:19, , 6F
i*16,有可能 Exception
05/14 12:19, 6F

05/14 13:56, , 7F
continue?
05/14 13:56, 7F

05/14 16:37, , 8F
這個是.............................................冏
05/14 16:37, 8F

05/14 16:55, , 9F
那個c應該是color space之類的,灰階和彩色~
05/14 16:55, 9F

05/14 16:57, , 10F
然後看到6+i*16這種東西....沒說明是什麼會很想揍人
05/14 16:57, 10F

05/14 16:57, , 11F
看起來像是讀bitmap的東西,那bitCount的case本身可能有問題
05/14 16:57, 11F

05/14 16:59, , 12F
而且印象中,灰階和彩色的header大小是不一樣的。
05/14 16:59, 12F

05/14 17:07, , 13F
呃…我喜歡文件和註解 Q__Q
05/14 17:07, 13F

05/14 17:28, , 14F

05/14 17:28, , 15F
沒文件的情形下,我認為這題考官要開放可以google =w=
05/14 17:28, 15F

05/14 17:29, , 16F
kARGB_8888我覺得應該是case 32可以用而己…
05/14 17:29, 16F

05/14 17:29, , 17F
可是連SkBitmap的文件也沒有,所以…天曉得…
05/14 17:29, 17F

05/14 17:31, , 18F
wiki的資料,color depth有1,4,8,16,24,32,48,64
05/14 17:31, 18F

05/14 17:31, , 19F
所以case有漏掉幾種…另外就是調色盤的問題
05/14 17:31, 19F

05/14 17:32, , 20F
以前處理的時候,有的圖不是ARGB的放法~記得是要看調色盤
05/14 17:32, 20F

05/14 17:35, , 21F
呃…說錯了…那時從twain拿黑白的圖時…
05/14 17:35, 21F

05/14 17:36, , 22F
有黑底或白底的設定…然後需要改動調色盤的值。
05/14 17:36, 22F

05/14 17:41, , 23F
不知道是原問題真的只給這樣,還是原PO有刪掉
05/14 17:41, 23F

05/14 17:42, , 24F
想著想著頭很痛…決定去休息了…今天明明就是假日啊。休息去
05/14 17:42, 24F

05/14 18:05, , 25F
洗完澡後,又想到隱藏性的問題了… QwQ
05/14 18:05, 25F

05/14 18:06, , 26F
首先,這題八成是給有待在業界的人考的,剛畢業天曉得DIB
05/14 18:06, 26F

05/14 18:07, , 27F
再來,考這種問題應該是想找及時的戰力。
05/14 18:07, 27F

05/14 18:09, , 28F
而且這家公司應該不小,這題可以刷掉一堆面試者。
05/14 18:09, 28F

05/14 18:13, , 29F
會有面試者太多的煩惱,應該公司不會太小吧…
05/14 18:13, 29F

05/14 18:13, , 30F
嗯,換個角度思考後,頭果然比較不會痛了…呵呵呵
05/14 18:13, 30F

05/14 20:32, , 31F
最大的隱藏問題就是這份考卷很爛 XD
05/14 20:32, 31F

05/14 22:21, , 32F
混C跟C++的CODE...該繼續看嗎?
05/14 22:21, 32F

05/14 22:27, , 33F
抱歉看錯~
05/14 22:27, 33F

05/14 22:27, , 34F
忽略上面推文XDDD
05/14 22:27, 34F

05/14 22:57, , 35F
總覺得資訊很不足Orz 話說, default後那個continue是合
05/14 22:57, 35F

05/14 22:58, , 36F
語法的嗎?_?
05/14 22:58, 36F

05/14 23:20, , 37F
我的直覺是buf的長度夠不夠塞資料 XD
05/14 23:20, 37F

05/15 01:09, , 38F
這看起來找的領域不是那麼大眾化啦 比較專精於某方面
05/15 01:09, 38F

05/15 01:10, , 39F
考慮到資訊的不足 也不大可能每一項都背起來 應該可以用
05/15 01:10, 39F

05/15 01:11, , 40F
推理的方式講解 像是猜測它為何這樣想(像是讀標頭檔內容)
05/15 01:11, 40F

05/15 01:12, , 41F
整個程式乍看之下 就是在讀標頭檔 判斷輸入的圖片格式
05/15 01:12, 41F

05/15 01:14, , 42F
由於資訊不足 就把可能發生錯誤的地方點出來講
05/15 01:14, 42F

05/15 01:18, , 43F
像是i跟c buff continue 還有第一個if是否該調到最上面
05/15 01:18, 43F

05/15 13:09, , 44F
會讀不到東西吧 void*轉型
05/15 13:09, 44F

05/15 13:09, , 45F
buff GG?
05/15 13:09, 45F

05/15 13:13, , 46F
如果void*轉型讀不到 那fread....?
05/15 13:13, 46F

05/16 01:38, , 47F
buff不是指標卻存位址? 最近剛好有看到這種寫法
05/16 01:38, 47F

05/16 01:39, , 48F
然後就是用void*硬轉
05/16 01:39, 48F
文章代碼(AID): #1DpSZzbW (C_and_CPP)
文章代碼(AID): #1DpSZzbW (C_and_CPP)