因此,我研究了如何根据 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 位将输出到第一个数字。
当您应用右移 4
时,它相当于将字符值除以 16
。这为您提供了第二位数字的最高 4 位。
一旦计算出上述数字值,就从常量字符串 str1 中提取所需的字符,所有字符都在各自的位置。
关于c++ - 关于在 C++ 中通过 ASCII 将文本转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176763/