看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《chuanmaotou (魯蛇)》之銘言: : 問題(Question): : 從一個二進位制的檔案讀入資料將他轉換成64bit-signed int : 內容大概像這樣 : char s[9]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'}; : 原本我是自己寫一個函式用位元運算硬轉 但因為是signed integer還有負數 : 處裡很複雜 所以放棄自己寫一個函式來轉 : 有翻過cpp reference 似乎可以用stringstream來轉換 : 但試驗後 似乎必須是*s="0x0000006a46d2df44"這類的形式才能直接用stringstream轉 : 有想過把'\xff'形式的字元轉成"FF"後餵給stringstream : 但似乎又有點多此一舉 不知道是不是有什麼更好的方法可以轉換? : 餵入的資料(Input): : char s[9]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'}; : (一個從檔案讀入的hex字串 00 00 00 6A 46 D2 DF 44 ) : 預期的正確結果(Expected Output): : 456454758212 這裡的問題是 char 為有號字元,但陣列內存入超過 127 以上的字元, 不加以處理會造成問題 unsigned long long n , m ; const int M = 8 ; char s[M]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'}; n = 0 ; for ( int i = 0 ; i < M ; ++i ) { m = static_cast<unsigned char>(s[i]) ; n += ( m << (8*((M-1)-i) ) ) ; } cout << n << endl ; 輸出:456454758212 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.25.21 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438224668.A.C75.html