我正在讀取二進制文件cmd.exe到無符號字符數組。讀入bytes_read的總字節數爲153.我將它轉換爲base64字符串,然後將此字符串解碼(從第二個答案base64 decode snippet in c++開始)到矢量<'BYTE>中。這裏BYTE是無符號字符。 decodedData.size()也是153.但是,當我將這個向量寫入二進制模式文件以再次獲取我的cmd.exe文件時,我只能得到1 KB文件。我錯過了什麼?寫入無符號字符向量到二進制文件C++
// Reading size of file
FILE * file = fopen("cmd.exe", "r+");
if (file == NULL) return 1;
fseek(file, 0, SEEK_END);
long int size = ftell(file);
fclose(file);
// Reading data to array of unsigned chars
file = fopen("cmd.exe", "r+");
unsigned char * myData = (unsigned char *)malloc(size);
int bytes_read = fread(myData, sizeof(unsigned char), size, file);
fclose(file);
std::string encodedData = base64_encode(&myData[0], bytes_read);
std::vector<BYTE> decodedData = base64_decode(encodedData);
////write data to file
ofstream outfile("cmd.exe", ios::out | ios::binary);
outfile.write((const char *)decodedData.data(), decodedData.size());
更新: 感謝@chux的建議 「R +」 - > 「RB +」 問題解決。
我在c#中做了所有這些工作。上面的代碼中缺少什麼東西? –
函數fread的返回值爲153 –
1 kb可能是最小可能的非空文件...你看過這個文件嗎? –