将chars用于int数据类型

时间:2018-03-04 05:39:40

标签: c arrays types int

使用C,一个包含5个存储空间的数组

int call[5]

我正在试图弄清楚如何使用数组的前3个空格来进行基数为36的转换(意味着1K0 base-36等于基数为10的2040),其他2个空格将被填充数据(可能更多整数)。

然而...... 1K0 看起来真的像个int吗? (对我来说K看起来像一个char,理论上,char应该足够-127到127,使用base-36进行转换)

然而,如果我尝试使用int而不是char来执行此操作会发生什么?

有没有其他方法可以在第一个数组中使用base-36转换,只与内存中其余空格的int混合使用

重要吗? (因为数组被声明为int)

编辑:要清楚我只想知道我是否可以声明一个int数组并用字符填充它,如果我不能,我怎么能实现这个呢?

1 个答案:

答案 0 :(得分:1)

我不确定你是否可以告诉编译器,你可以发信号通知十六进制(0x),八进制(o)二进制(b),但是基数36很奇怪,不能成为标准。

你总是可以创建一个函数(也许可以嵌入到类中)来执行base 36的string-to-base10转换

我会用C语言尽我所能

int base10Number = 0
int base36StringLenght = strlen(base35String);
for( int i = base36StringLenght - 1; i <= 0; i--){ //count from the end of the string back
  char c = base36String[i];
  if(c <= '9'){
    c -= '0' //gives a 0 to 9 range
  }
  else{ //assuming that the string is perfect and has no extra characters is safe to just do this
    c = tolower(c); //first make sure it's lowercase
    c -= 'a' + 10 // this will make the letters start at 10 dec
  }
  base10Number += c * pow(36, base36StringLenght - 1 - i) // the power function specifies which 'wheel' you're turning (imagine an old analog odometer) and then turns the wheel c times, then adds it to the overall sum.
}

这整个代码的工作理论是,从最后一个开始的每一个数字都值得它的基数为10的数字乘以36到它最后位置的幂。 所以最后一位是c * 36 ^ 0,即1 *,c * 36 ^ 1,依此类推。类似于2 * 10 ^ 1如果等于20,如果2是倒数第二的位置。

希望其中一些对您有意义,并且不要忘记将您的base36号码设为字符串

修改   我看到你对答案的编辑和简短的asnwer是肯定的,你可以完全这样做,这将浪费空间,因为你总是有3个字节未被使用,你可以简单地制作一个char数组。此外,所有字符串函数都会要求你为它们提供一个char数组(你可以把它转换)但是如果你每个数组空间存储一个数字,那么char就可以了。如果你的数组是动态的和/或你需要对它进行一些数学运算,那么基数为36到10的转换将允许你进行数学运算并将整个数组吹成单个int或float类型。但是,如果您只是将其存储为稍后显示或以相同格式将其提供给另一个功能,则根本不需要转换。 (如果你正在使用大量的这些数字,你需要将它们放入数据库转换为base10并存储在单个数据中将节省大量空间)

PS:还编辑了代码,使用''封闭的字符而不是ascii数字,感谢请求!