[問題] C語言在linux環境下的字串轉16進位

看板C_and_CPP作者 (sionkozx)時間12年前 (2012/03/15 00:32), 編輯推噓3(308)
留言11則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 開發平台為Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我的問題為~ 因為我是用MODBUS去通訊~ 現在我要寫入時間~ 假設年為12 月份為01 日期為01 時分秒為00 00 00 在此我傳進去的值必須為0x1201 0x0100 0x0000 我已經把時間取出來~ 弄成字串形式 但是我要轉成16進位的值卻遇到困難了!~ 如果我用atoi()出來的值都會變成0 我其實有想到一個方法~就是把時間取出來以後~ 一個一個取出來再轉成整數~ 然後在丟值的時候~ 變成(((1*16)+2)*16+0)*16+1 這樣去存~ 不知道還有沒有更好的方式? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.237.249

03/15 00:36, , 1F
字串轉16進位? 是用strtol嗎?@@
03/15 00:36, 1F

03/15 01:13, , 2F
你別被字面上的 16 進位給誤導了 和字串沒有關係
03/15 01:13, 2F

03/15 01:13, , 3F
你要的只是類似於拿兩個一位數拼成兩位數這樣的動作而已
03/15 01:13, 3F

03/15 01:14, , 4F
例如拿一個 3 和一個 5 拼成 35 我們可以做 3*10+5
03/15 01:14, 4F

03/15 01:14, , 5F
這裡因為是十六進位兩位所以改乘 16 平方即 256 就行了
03/15 01:14, 5F

03/15 10:56, , 6F
我的意思是能不能把字串0x1201 轉成值(16進位型態)
03/15 10:56, 6F

03/15 11:06, , 7F
strtol好像可行!~strtol(yearmontime, &tempPtr, 16)
03/15 11:06, 7F

03/15 13:22, , 8F
sscanf %x就做得到
03/15 13:22, 8F

03/16 15:10, , 9F
stringstream?
03/16 15:10, 9F

03/16 18:07, , 10F
原po是用c
03/16 18:07, 10F

03/16 23:18, , 11F
我誤會了..
03/16 23:18, 11F
文章代碼(AID): #1FOCWRBs (C_and_CPP)