将char数组中的数字字符转换为二进制字符
converting number characters in a char array to binary
char *toBin(unsigned long long num)
{
char s[9999];
const int size= 9999;
char *temp = new char[size];
int i, j;
int binBase = 2;
for(i=0; num!= 0; i++)
{
s[i] = num % binBase + '0';
num /= binBase;
}//get backwards binary
for(j=0; i>=0; j++)
{
i--;
temp[j]=s[i];
}//reverse binary sequence
//increments one more so need to decrement
temp[--j] = ' ';
return temp;
delete temp;
}
如果我在char数组中有"82",我首先将"82"转换为十进制82,并将82赋给上面的函数以转换为二进制。这只能在一定的位数范围内工作。
我认为我的问题是,无符号长-长只能容纳一定数量的数字,所以当它超过这个限制时,一些随机的东西会发送到函数,它会打印出错误的二进制文件。
上面的函数将无符号长整型num转换为二进制。我意识到,更好的方法是查看char数组中的每个字符,而不是先将其转换为数字,然后使用这些值转换为二进制。然而,我很难把它写进代码中。如有任何建议或帮助,我们将不胜感激。
GNU多精度(GMP(库具有在任何基数中打印任何大小数字的功能。以下是一个示例。
#include <iostream>
#include <gmpxx>
int main()
{
std::string numstr = "1234123412341234123412341234";
// initialize mpz_class to have numstr in it (given in base 10)
mpz_class bigint(numstr, 10);
// convert to binary (base 2)
std::string binstr = bigint.get_str(2);
std::cout << numstr << " -> " << binstr << std::endl;
return 0;
}
程序输出
1234123412341234123412341234 -> 111111110011010111110011000011110100100000101001110100011000000101000011000000000111110010
- 在堆栈上分配9999个
char
的数组是不明智的,因为它对您的平台来说可能太大了。无论如何,您可以很容易地计算出所需的最大位数(+终止符(:CHAR_BIT*sizeof num+1
- 此外,没有必要在堆上分配相等的数量
- 不要害怕指针:
- 初始化指向最后一个字节的指针
- 将其设置为零
- 将从最小数字开始的所有数字相加(至少一个,即使数字为0(
- 返回已完成编号的副本
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 转换特殊字符(UTF-8)
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 如何在 c++ 中将字符串转换为字符?
- 如何将矢量<int>转换为字符数组?
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 如何将可变大小的结构转换为字符数组
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 在c++中将字符串转换为字符
- 将常量字符* 转换为字符时出错
- c ++如何将字符串数组转换为字符数组
- 将双倍转换为字符数组C++
- std::字符串 's' 通过 '&s[0]' 转换为字符* - 如何/为什么这样做?
- 二进制字符数组转换为字符串流并从缓冲区弹出
- 将二进制字符的字符串表示转换为字符串的最佳方法
- C++不是按位运算符二进制字符转换
- 将char数组中的数字字符转换为二进制字符