[英]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.