在int数据类型中使用chars
使用C,一个数组有5个内存空间在int数据类型中使用chars,c,arrays,types,int,C,Arrays,Types,Int,使用C,一个数组有5个内存空间 int call[5] 我试图找出如何使用数组的前3个空格进行base-36转换,这意味着1K0 base-36等于base-10中的2040,其他2个空格将填充可能更多的整数 然而。。。1K0看起来像整数吗?对我来说,K看起来像一个字符,理论上,字符应该足够-127到127,以便使用base-36进行转换 但是,如果我尝试使用int而不是char来执行此操作,会发生什么 在第一个数组中使用base-36转换,在内存中的其余空间中只混合int,还有其他方法吗 这
int call[5]
我试图找出如何使用数组的前3个空格进行base-36转换,这意味着1K0 base-36等于base-10中的2040,其他2个空格将填充可能更多的整数
然而。。。1K0看起来像整数吗?对我来说,K看起来像一个字符,理论上,字符应该足够-127到127,以便使用base-36进行转换
但是,如果我尝试使用int而不是char来执行此操作,会发生什么
在第一个数组中使用base-36转换,在内存中的其余空间中只混合int,还有其他方法吗
这有关系吗?因为数组被声明为int
编辑:为了清楚起见,我只想知道我是否可以声明一个int数组并用字符填充它,如果我不能,我该如何实现这一点?我不确定你是否可以告诉编译器,你可以用十六进制0x,八进制o二进制b来表示,但基数36太奇怪了,不能成为标准 您总是可以创建一个函数,并可能将其嵌入到一个类中,该类对base 36进行字符串到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,它是一,c*36^1,依此类推。如果2位于倒数第二位,则2*10^1等于20的情况类似
希望其中一些对您有意义,不要忘记将base36数字设置为字符串
编辑:
我看到了你对答案的编辑,简短的asnwer是肯定的,你完全可以这样做,这将是浪费空间,因为你将有整整3个字节在任何时候都没有使用,你可以简单地制作一个字符数组。此外,所有字符串函数都会要求您为它们提供一个char数组,您可以对其进行强制转换,但如果您在每个数组空间中存储一个数字,char就可以实现这一目的。如果您的数组是动态的,并且/或者您需要对其进行一些数学运算,那么基数36到基数10的转换将允许您进行数学运算,并为单个int或float类型破坏整个数组。但是,如果只是存储它以便以后显示,或者以相同的格式将其提供给另一个函数,则根本不需要进行转换。如果您正在处理大量这些数字,并且需要将它们放在一个数据库中,将它们转换为base10并存储在一个in中,将节省大量空间
PS:还编辑了代码以使用“”封闭字符而不是ascii数字,谢谢您的请求 为什么使用数字ASCII码而不是“-封闭符号?没有特别的原因,我的错,我只是习惯了。我很惊讶你的回答有多快,请允许我用我自己的话来理解:所以基本上你建议将它转换为base-36,制作一个字符串,然后将字符串的每个字符插入数组的前3个值,然后在需要时,取出前3个值并将它们转换回base-10?顺便说一句,我编译了代码,以修复几个拼写错误并使其运行,并编辑了您的答案,使其可以运行,而不是从输入2040中得到1k0,93456,至少是十进制形式,但是我希望它能输出1K0,我不确定这是什么基数,现在看这是在线编辑器上运行的代码,我想了解一些额外的细节,关于为什么你要用基数36作为初学者,你在哪里需要它,如果你需要对它进行数学运算,或者只是存储它。是的,你可以声明一个int数组并用字符填充。@Arheisel基本上我需要存储大量的信息,而且我的内存有限,所以我在寻找其他方法来减少数字,int8是不够的,所以我首先想到的是使用一个非标准的更高的基数conversion@GoatZero如果您尝试使用另一个基地,将不会节省任何空间。只是说说而已。