[英]Regarding conversion of text to hex via ASCII in C++
因此,我研究了如何根據ASCII將文本轉換為十六進制,並且有一個可行的解決方案(在此處提出)。 我的問題是我不明白為什么會這樣。 這是我的代碼:
#include <string>
#include <iostream>
int main()
{
std::string str1 = "0123456789ABCDEF";
std::string output[2];
std::string input;
std::getline(std::cin, input);
output[0] = str1[input[0] & 15];
output[1] = str1[input[0] >> 4];
std::cout << output[1] << output[0] << std::endl;
}
一切都很好-它返回單個字符的十六進制值,但是,我不明白的是:
input[0] & 15
input[0] >> 4
如何對字符串中的字符執行按位運算? 而且為什么它如此之好地返回我們所需要的確切值?
謝謝你的幫助! :)
在C ++中,字符長8位。
如果用15
'&'
(二進制1111
),則最低有效4位將輸出到第一位。
當您將right shift by 4
,則等效於將字符值除以16
。 這為您提供了第二位的最高有效4位。
一旦計算出上述數字值,就從具有所有字符在其相應位置的常量字符串str1中提取所需的字符。
“字符串中的字符”不是字符 (僅一個字符的單個字符串)。 在某些編程語言中,它們是。 以Javascript為例,
var string = "testing 1,2,3";
var character = string[0];
返回"t"
。
但是,在C和C ++中,“字符串”是8位字符的數組。 數組的每個元素都是從0..255開始的8位數字。
字符只是整數。 在ASCII中,字符“ 0”是整數48。C++在許多情況下都隱式進行此轉換,包括代碼中的一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.