Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在int数据类型中使用chars_C_Arrays_Types_Int - Fatal编程技术网

在int数据类型中使用chars

在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,还有其他方法吗 这

使用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


编辑:为了清楚起见,我只想知道我是否可以声明一个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如果您尝试使用另一个基地,将不会节省任何空间。只是说说而已。