繁体   English   中英

将char用作int数据类型

[英]Using chars into an int datatype

使用C,一个具有5个内存空间的数组

int call[5]

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

但是... 1K0实际上看起来像一个int吗? (对我来说,K看起来像一个字符,从理论上讲,对于使用base-36进行转换,字符应该足够-127到127)

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

有没有其他选择可以在第一个数组中使用base-36转换,而仅将int混合用于内存中的其余空间

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

编辑:明确地说,我只想知道我是否可以声明一个int数组并用char填充它,如果我不能,该如何实现呢?

我不确定是否可以告诉编译器,您可以用信号表示十六进制(0x),八进制(o)二进制(b),但是以36为底的奇数就不够标准了。

您始终可以创建一个函数(并可能将其嵌入到类中),该函数可以将基数36转换为字符串到base10

我会尽我所能

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,即c * 36 ^ 1,依此类推。 如果2倒数第二个位置,则2 * 10 ^ 1等于20的方法类似。

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

编辑:我看到您对答案的编辑,并且简短的回答是,您可以完全这样做,这将浪费空间,因为您一直都没有使用整个3个字节,您可以简单地创建一个char数组。 此外,所有字符串函数都将要求您为它们提供一个char数组(可以对其进行强制转换),但是如果您在每个数组空间中存储一位,那么char就能解决问题。 如果您的数组是动态的,并且/或者您需要对其进行一些数学运算,则从36到10的基数转换将允许您进行数学运算并将整个数组转换为单个int或float类型。 但是,如果您只是要存储它以便以后显示或将其以相同的格式提供给另一个函数,则根本不需要进行转换。 (如果要处理大量的数字,则需要将它们放入转换为base10的数据库中,并存储在一个数据库中将节省大量空间)

附言:感谢您的要求,还编辑了代码以使用''包含的字符而不是ascii数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM