簡體   English   中英

關於在C ++中通過ASCII將文本轉換為十六進制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM