繁体   English   中英

如何将 int 数组转换为单个 int c

[英]How to convert an int array into a single int c

我有一个 integer 数组,int KEY[32],它存储一个四字母四边形的二进制表示,例如:

char quadgram[4] = {'T','I','O','N'};

其中字符的二进制表示为:T => 01010100,I => 01001001,O => 01001111,N => 01001110。我将这些二进制数转换为integer数组:

KEY[32] = 01010100010010010100111101001110;

现在我需要将此 KEY 转换为其文字二进制值,即:

int KEY_BIN = 1414090574; // in decimal.

我将如何完成将 KEY 转换为 KEY_BIN?

给定整数数组,您可以遍历它们,将数字移位适当的位数,然后将其与您的结果值按位或运算。 您会希望KEY成为一个无符号整数数组,以便具有明确定义的移位行为。

一个工作示例:

#include <stdio.h>

int main() {
   unsigned int KEY[32] = {0, 1, 0, 1, 0, 1, 0, 0, 0, 
                           1, 0, 0, 1, 0, 0, 1, 0, 1, 
                           0, 0, 1, 1, 1, 1, 0, 1, 0, 
                           0, 1, 1, 1, 0 };
   unsigned int result = 0;
   for ( unsigned int i = 0; i < 32; ++i ) {
      unsigned int shiftAmount = 32 - i - 1;
      unsigned int shifted = KEY[i] << shiftAmount;
      result |= shifted;
   }

   printf( "%u\n", result ); // Prints 1414090574
}

我已将这些二进制数转换为 integer 数组

为什么? 这对计算机来说不是有用的格式,它只是一个多余的中间步骤。 摆脱它,它不需要。


如何在 integer 中存储值取决于字节序什么是 CPU 字节序? 如果我们不首先了解这一点,那么就无能为力。

现在你所说的“文字二进制值”实际上是大端表示,第一个字符存储在最重要的地址。 我们可以通过使用位移位始终将第一个字母移动到 ms 字节来使字节顺序可移植代码:

#include <stdio.h>
#include <stdint.h>

int main (void)
{
  char quadgram[4] = {'T','I','O','N'};
  uint32_t val;

  val = (uint32_t)quadgram[0] << 24 |
        (uint32_t)quadgram[1] << 16 |
        (uint32_t)quadgram[2] <<  8 |
        (uint32_t)quadgram[3] <<  0 ;

  printf("%d\n", val);
}

暂无
暂无

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

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