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