c - 使用 char 到 int 数据类型

标签 c arrays types int

使用C语言,一个数组有5个内存空间

int call[5]

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

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

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

是否有其他方法可以在第一个数组中使用 base-36 转换,仅与内存中其余空间的整数混合

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

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

最佳答案

我不太确定你是否可以告诉编译器,你可以发出十六进制 (0x)、八进制 (o) 二进制 (b) 信号,但基数 36 很奇怪,不符合标准。

您始终可以创建一个函数(并且可能将其嵌入到类中)来执行基数 36 的字符串到基数 10 的转换

我会在 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 位于倒数第二个位置,则 2*10^1 等于 20 的情况类似。

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

编辑: 我看到你对答案的编辑,简短的回答是肯定的,你完全可以这样做,这会浪费空间,因为你将有整整 3 个字节始终未使用,你可以简单地创建一个 char 数组。此外,所有字符串函数都要求您向它们提供一个 char 数组(您可以转换它),但如果您在每个数组空间中存储一位数字,则 char 就可以了。如果您的数组是动态的和/或您需要对其进行一些数学计算,则以 36 为基数到以 10 为基数的转换将允许您进行数学计算并为单个 int 或 float 类型吹散整个数组。但是,如果您只是要存储它以便稍后显示或将其提供给相同格式的另一个函数,则根本不需要转换。 (如果您正在处理大量此类数字,并且需要将它们放入数据库中,转换为 base10 并存储在单个文件中将节省大量空间)

PS:还编辑了代码以使用“”括起来的字符而不是 ascii 数字,感谢您的请求!

关于c - 使用 char 到 int 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092365/

相关文章:

types - 如何在 F# 中定义两个相互依赖的类型?

c++ - 字符解码转换函数实现

C数组的结构段错误

将两个日期作为 C 中的 char 数组进行比较

php - 为什么 PHP 不断重置数组指针?

java - 哪个更有效率

c - 如何在 C 中打印最大可能的 float 和 double ?

C++将数组参数传递给函数

python - Python中不同十六进制类型/表示之间的区别

ios - 用于测试对象类型的通用 Swift 函数