如何从 32 个字符的二进制字符串转换为十六进制
How to convert from a binary string of 32 characters to hex?
我知道网上有大量关于如何从字符串转换为十六进制的教程。好吧,我对此有问题。
我的代码(见下文)最多可以工作 31 个字符,我一生都无法弄清楚为什么。每当有 32 个字符时,它就会达到 7fffffff。
我需要能够输入类似"111111111100000000001010101000"的内容
应该很容易解决,只是不确定在哪里
我的尝试(可编译):
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int Base = 2;
long x;
char InputString[40];
char *pEnd = NULL; // Required for strtol()
cout << "Number? ";
cin >> InputString;
x = strtol(InputString, &pEnd, Base); // String to long
cout << hex << x << endl;
return 4;
}
这可能是因为机器上的长是 32 位,而 signed long
不能在 2 的补码中容纳 32 位。您可以尝试使用unisgned
(不会"浪费"一点符号)或 64 位宽的long long
。
unsigned long x = strtoul(InputString, &pEnd, Base);
^^^^
或long long
:
long long x = strtoll(InputString, &pEnd, Base);
strtol
和strtoul
的功能在C++中已经存在很长时间了。事实上,strtoll
和long long
已经在C++11中引入。
long
不能存储超过 32 位(实际上是 31 位加上一个符号位)。如果您想要超过 32 位,请尝试long long int
并strtoll()
,或者如果 32 位足够,请尝试unsigned long
并strtoul()
。
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何从二进制文件中读取字符串
- 二进制数之和(使用C样式字符串)
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 查找"n"二进制字符串中最长公共子字符串的长度
- 递归二进制搜索与字符串数组
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 将位字符串转储到二进制文件的最佳方法是什么
- 如何排列二进制字符串以最小化它们之间的距离
- 字符串的递归二进制搜索-C++
- 如何检查二进制文件中是否存在字符串
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- C++ 如何以二进制格式表示字符串?
- 将大型二进制字符串写入二进制文件
- 字符串二进制组合学
- 如何使用 tolua++ 将 lua 字符串(二进制)传递给 c++
- 将Matlab生成的字符串二进制转换为浮点
- C++ - 将字符串二进制链转换为整数二进制链
- 将字符串(二进制)转换为整数