c++ - 关于在 C++ 中通过 ASCII 将文本转换为十六进制

标签 c++ string hex ascii bitwise-operators

因此,我研究了如何根据 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/

相关文章:

java - ArrayList自己的类型转String?

Python条件连接不以标点符号结尾的*连续*字符串

android - 在android上将十六进制转换为二进制

postgresql - 如何将表示 postgresql 中的 HEX 八位字节的字符串转换为二进制?

c++ - 使用类似于 Inspect 的 GDI+(或 GDI)在屏幕上绘图

c++ - 异步 Wt::Http::Client 响应和请求匹配

c++ - 如何将 C++ unsigned char [] 传递给 Tcl bytearray?

正确的格式说明符以打印字符串

c - 如何获取十六进制数的位 AES 实现

c++ - 打破一个 TU 内的 ODR?