使用C,一个具有5个内存空间的数组
int call[5]我试图弄清楚如何使用数组的前3个空格进行基-36转换(意味着1K0基-36等于基础-10中的2040 ),其他两个空格将被填充数据(可能更多的in )。
然而..。1K0看起来像int吗?(对我来说,K看起来像个字符,理论上,char应该足够-127到127,用于使用base-36)。
但是,如果我尝试使用int而不是char来做这件事,会发生什么呢?
在第一个数组中是否有任何替代方法来使用基-36转换,仅对内存中的其余空格使用in。
有关系吗?(因为数组被声明为int)
编辑:要弄清楚,我只想知道我是否可以声明一个int数组并填充它的字符,如果我不能,我如何才能做到这一点?
发布于 2018-03-04 06:07:36
我不确定你是否能告诉编译器,你可以向十六进制(0x),八进制(o)二进制(b)信号,但基数36是奇怪的,不符合标准。
您可以始终创建一个函数(并可能将其嵌入到类中),该函数执行基36的字符串到base 10的转换。
我会尽我最大的努力
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数字变成一个字符串。
编辑:我看到了您对答案的编辑,简短的是,您完全可以这样做,这将是浪费空间,因为您将有整整3个字节在任何时候都未使用,您可以简单地创建一个char数组。此外,所有字符串函数都将要求您为它们提供一个char数组(您可以转换它),但是如果每个数组存储一个数字,空间char就能做到这一点。如果您的数组是动态的,并且/或您需要对其进行一些计算,那么基本36到基本10的转换将允许您进行计算,并为单个int或float类型吹掉整个数组。但是,如果您只是要存储它,以便稍后显示它,或者将它以相同的格式提供给另一个函数,则根本不需要转换。(如果您正在处理大量的这些数字,并且需要将它们放在数据库中,转换为base10并存储在一个单独的数据库中,将节省大量的空间)
PS:还编辑了代码使用‘’封闭字符,而不是ascii数字,谢谢您的要求!
https://stackoverflow.com/questions/49092365
复制相似问题