我想將字節數據(文件正文)轉換爲十六進制以打印它。我已經複製了一個轉換函數,但並不完全理解它。C++ char *到HEX轉換
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
std::string byte_2_str(char* bytes, int size) {
char const hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B','C','D','E','F'};
std::string str;
for (int i = 0; i < size; ++i) {
const char ch = bytes[i];
str.append(&hex[(ch & 0xF0) >> 4], 1);
str.append(&hex[ch & 0xF], 1);
}
return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = "1";
std::string str = byte_2_str(data, sizeof(data));
std::cout << str << std::endl;
system("PAUSE");
return 0;
}
什麼是移位(4)和掩碼0xF?它是如何工作的?此外,當我試圖將「1」作爲參數傳遞給func時,它返回3100,但我認爲它會返回0100,因爲1在dec或hex中都是1。我錯了嗎?
'sizeof(data)'是錯誤的,因爲你基本上在你的計算中包含了空字符。你應該使用'strlen(data)'。話雖如此,你在這裏混合C字符串和C++字符串。 –
我知道,我使用char *因爲我有一個字節數組的文件內容(類似於char),因此strlen將不會有用(因爲數組中有\ r \ n個字符) –
*什麼是shift 4)和掩碼0xF用於?*它將'(ch&0xF0)'的結果從位4..7移動到位0..3,大概是這樣可以更容易地訪問它們 –