Descompactação de caracteres a partir de um
inteiro. Se seu sistema usa inteiros de 4 bytes, reescreva
a função descompactaCaracteres do Exercício
10.14 para que ela descompacte 4 caracteres. Crie as
máscaras necessárias para descompactar os 4 caracteres
deslocando o valor 255 à esquerda em 8 bits na variável
de máscara por 0, 1, 2 ou 3 vezes (a depender do byte
que você estiver descompactando).
Passo 1
Para escrever este programa, primeiro declararemos o arquivo de cabeçalho para as operações de entrada e saída.
#include stdio.h>
Então, vamos criar uma função chamada showBits que aceita um valor inteiro e imprimir os 32 bits (4 bytes) desse inteiro. Para isso, teremos que
// Declare the method and its parameter
void showBits(unsigned int val){
// Display the integer value
printf("Integer: %d\n", val);
// Display the 32 bits of the given integer
// By iterating within the bits
printf("Bits: ");
for (int i = 1; i + ) {
// then getting the each bit by combining
// the value with the bit mask
printf("%d", val & (1 1 : 0);
// and shifting the value to the left by 1 bit
val
}
printf("\n");
}
Passo 2
Agora, vamos criar uma função chamada unpackCharacters que aceita um valor inteiro como parâmetro e exibe os quatro caracteres descompactados e seus bits. Para isso teremos que
// Declara o método e seu parâmetro
void unpackCharacters(unsigned int val){
// Declara as variaveis
unsigned int result; // To store the character
unsigned int mask; // To store the mask value
// Exibe cada um dos caracteres
printf("\nThe unpacked characters are:");
// Iterando dentro de 4-bytes
for(int i=3; i >= 0; i--){
// Define a mascara apropriada
mask = 255
// Em seguida, obtenha cada caractere combinando o valor
// com o valor da máscara atual e deslocando-o para a direita
// para os bits apropriados
result = (val & mask) >> (8 * i);
// Exibe o caractere atual e seus bits
printf("\nCharacter: \'%c\'\n", result);
showBits(result);
}
}
Finalmente, use a função main para fazer o seguinte
int main(){
// Declara a variável para armazenar os 4 bytes de caracteres compactados
unsigned int pack;
// Solicita ao usuário que insira os caracteres compactados como inteiros
printf("Enter the packed value: ");
scanf("%u", &pack);
// Exibe os bits dos caracteres compactados antes do
// descompacta a operação invocando a função showBits
printf("\nThe packed characters as integer and as bits. \n", pack);
showBits(pack);
// Chama a função para descompactar os quatro caracteres e seus bits unpackCharacters(pack);
return 0;
}
Resposta
Ver o desenvolvimento minha realeza