【问题标题】:C++ Array to one Int variable [closed]C ++数组到一个Int变量[关闭]
【发布时间】:2018-03-09 10:51:05
【问题描述】:

我目前正在研究一个项目,它是一个转换器...我目前正在研究十进制到十六进制。到目前为止的代码如下所示:

int rest;
int arr[50];
int i;
cout << N << " in decimal after conversation ";
while (N>0){
rest=N%16;
if (rest>9){
    switch (rest){
    case 10:
        arr[i]='A';
        break;
    case 11:
        arr[i]='B';
        break;
    case 12:
        arr[i]='C';
        break;
    case 13:
        arr[i]='D';
        break;
    case 14:
        arr[i]='E';
        break;
    case 15:
        arr[i]='F';
        break;
    }
}
else {
    arr[i]=rest;
}
N=N/16;
i+=i;
}
cout<<arr;
return 1;

它在函数中,所以不要为返回 1 烦恼... 我的问题是: 有没有办法将整个数组(例如 containsig [4,2,K,8] 拉到一个变量中?以完全相同的顺序!

编辑

aaaaaaaaaaaaaaaaaaaaaaaaaa 我回来了 :D 我对程序进行了一些更改,现在它正在运行,它是这样的:

int DecToHex(long long N)       
{
int rest;                                           
string s="";                   
while (N>0){                
rest=N%16;            
if (rest>9){      
    switch (rest){     
    case 10:                
        s="A"+s;           
        break;
    case 11:
        s="B"+s;
        break;
    case 12:
        s="C"+s;
        break;
    case 13:
        s="D"+s;
        break;
    case 14:
        s="E"+s;
        break;
    case 15:
        s="F"+s;
        break;
        }
}
else {
    s = char(rest + 48) + s;
    }
N=N/16;
}
     if (s == "")
         cout << "0";
     else
         cout << s;
return 1;
}

知道如何将十六进制数转换为二进制数吗?十六进制可以是字符串,但二进制需要是 int。 程序的结构应该类似于我的这个。 bud thnak 向大家寻求帮助!

【问题讨论】:

  • 您是否考虑过直接使用std::string 而不是尝试构建和转换您的数组?
  • 我宁愿在没有“std::”的情况下编写它,因为整个程序都应该没有它们(不要问我为什么,因为我不知道)
  • 除了上述注释之外,您还可以将字符放入数组中,但随后您执行arr[i]=rest;。那应该是arr[i] = '0' + rest;
  • 整个开关也可以更换。值10-15(显然是连续的)对应于字符'A'-'F'(也是连续的)
  • @Kevin: '0', , '9' 保证是连续的,'A', .., 'F' 则不是这样。

标签: c++ arrays string hex decimal


【解决方案1】:

有没有办法将整个数组(例如包含 [4,2,K,8] 的变量)拉到一个变量中?

您可以使用std::string 并假装它是一个单一变量,但它只是chars 数组的增强版本。

顺便说一句,与上述问题无关的几点。

  1. 您可以简化switch 语句。 @Kevin 在评论中指出了这一点。
  2. arr[i]=rest; 的使用是错误的。它必须是arr[i]=rest+'0';。 @scohe001 在评论中指出了这一点。

这是循环的更新版本:

while ( N > 0 ) {
   rest = N%16;
   if (rest > 9){
      arr[i] = 'A' + rest - 10;
   }
   else {
      arr[i] = '0' + rest;
   }
   N = N/16;
   i += i;
}

您可以使用@Jarod 的建议使这更简单:

char const* hex_letters = "0123456789ABCDEF";
while ( N > 0 ) {
   rest = N%16;
   arr[i] = hex_letters[rest];
   N = N/16;
   i += i;
}

【讨论】:

  • "0123456789ABCDEF"[rest] 非常便携。
  • @Jarod42,当然。比我的第一个建议好多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多