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