将chars用于int数据类型

问题描述 投票:0回答:1

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

int call[5]

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

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

但是如果我尝试使用int而不是char来做这件事会怎么样?

是否有任何替代方法在第一个数组中使用base-36转换,只与内存中其余空间的int混合使用

有关系吗? (因为数组声明为int)

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

c arrays types int
1个回答
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数字,感谢您的要求!

© www.soinside.com 2019 - 2024. All rights reserved.