2014-02-17 169 views
3

所以我知道這個問題已經被問了很多次。我很抱歉再次提問,但我還沒有發現任何問題與我的具體情況。將十六進制寫入文件C++

所以我有一個程序讀取文件的十六進制,修改它,並將修改後的十六進制存儲在std :: string中。 因此,例如,如何將我寫這篇文章的文件

std::string wut="b6306edf953a6ac8d17d70bda3e93f2a3816eac333d1ac78"; 

,並得到其數值

.0n..:j..}p...?*8...3..x 
在輸出文件

我不想使用sprintf,但我想如果有必要,我會做我必須做的。

謝謝大家, 〜p

+1

你是說「file_的_hex」是什麼意思?您正在考慮文件的二進制,未格式化的內容或單個十六進制值? –

+0

內容全部轉換爲十六進制。我是新來的這個知識領域,所以... – Phixle

+0

如果我正確理解你,你正在閱讀二進制文件,將數據存儲爲十六進制字符串,然後想要將修改的數據寫回到文件(二進制)? –

回答

1

如果我理解你的問題正確,你想要的文字轉換成它的等價數字,然後寫入文件。鑑於你在你的問題中提供的提示,它應該逐字節地完成。以下是實現此目的的一種方法。請注意需要將字符串中的每個字節轉換爲整數值。

#include <string> 
#include <sstream> 
#include <iostream> 
#include <fstream> 
#include <ios> 

std::string wut = "b6306edf953a6ac8d17d70bda3e93f2a3816eac333d1ac78"; 

int main() 
{ 
    std::ofstream datafile("c:\\temp\\temp1.dat", std::ios_base::binary | std::ios_base::out); 

    char buf[3]; 
    buf[2] = 0; 

    std::stringstream input(wut); 
    input.flags(std::ios_base::hex); 
    while (input) 
    { 
     input >> buf[0] >> buf[1]; 
     long val = strtol(buf, nullptr, 16); 
     datafile << static_cast<unsigned char>(val & 0xff); 
    } 

} 
相關問題