如何将一个int数组转换成一个int c
How to convert an int array into a single int c
我有一个整数数组 int KEY[32],它存储四字母四边形的二进制表示,例如:
char quadgram[4] = {'T','I','O','N'};
其中字符的二进制表示are:T => 01010100,I => 01001001,O => 01001111,N => 01001110。我已经将这些二进制数转换为整数数组:
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
}
I have converted these binary numbers into the integer array
为什么?这对计算机来说不是有用的格式,它只是一个多余的中间步骤。摆脱它,不需要它。
如何在整数中存储值取决于endianess,What is CPU endianness? 如果我们先不理解这一点,那么就没有办法了。
现在你所说的“文字二进制值”实际上是大端表示,第一个字符存储在最重要的地址。我们可以通过使用位移位始终将第一个字母移动到 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);
}
我有一个整数数组 int KEY[32],它存储四字母四边形的二进制表示,例如:
char quadgram[4] = {'T','I','O','N'};
其中字符的二进制表示are:T => 01010100,I => 01001001,O => 01001111,N => 01001110。我已经将这些二进制数转换为整数数组:
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
}
I have converted these binary numbers into the integer array
为什么?这对计算机来说不是有用的格式,它只是一个多余的中间步骤。摆脱它,不需要它。
如何在整数中存储值取决于endianess,What is CPU endianness? 如果我们先不理解这一点,那么就没有办法了。
现在你所说的“文字二进制值”实际上是大端表示,第一个字符存储在最重要的地址。我们可以通过使用位移位始终将第一个字母移动到 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);
}