You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
4.1 KiB
97 lines
4.1 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
|
|
|
|
typedef unsigned char *byte_pointer;
|
|
|
|
void show_bytes(byte_pointer start, size_t len) {
|
|
int i;
|
|
|
|
for ( i = len-1; i >= 0; i--)
|
|
printf(" %.2x", start[i]);
|
|
|
|
return;
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
|
|
if ( argc < 2 ) {
|
|
printf("Forgot the argment! Try again!\n");
|
|
return 1;
|
|
}
|
|
|
|
short aShort = atoi(argv[1]);
|
|
|
|
printf("\nAs a short data type, the variable aShort has the value %hd (hex: 0x", aShort);
|
|
show_bytes((byte_pointer) &aShort, sizeof(short));
|
|
printf(")\n\n");
|
|
|
|
|
|
/* Convert - size - implicitly */
|
|
printf("Converting SIZE implicitly: short -> integer *** Sign extension ***\n");
|
|
printf("This is done by issuing the statement: int anInt = aShort;\n");
|
|
int anInt = aShort;
|
|
printf("As a int data type, the variable anInt has the value %d (hex: 0x", anInt);
|
|
show_bytes((byte_pointer) &anInt, sizeof(int));
|
|
printf(")\n\n");
|
|
|
|
/* Convert - size - implicitly */
|
|
printf("Converting SIZE implicitly: short -> char *** Truncation ***\n");
|
|
printf("This is done by issuing the statement: signed char aChar = aShort;\n");
|
|
signed char aChar = aShort;
|
|
printf("As a char data type, the variable aChar has the value %hhi (hex: 0x", aChar);
|
|
show_bytes((byte_pointer) &aChar, sizeof(signed char));
|
|
printf(")\n\n");
|
|
|
|
/* Convert - sign - implicitly*/
|
|
printf("Converting SIGN implicitly: short -> unsigned short\n");
|
|
printf("This is done by issuing the statement: unsigned short aUShort = aShort;\n");
|
|
unsigned short aUShort = aShort;
|
|
printf("As an unsigned short data type, the variable aUShort has the value %hu (hex: 0x", aUShort);
|
|
show_bytes((byte_pointer) &aUShort, sizeof(unsigned short));
|
|
printf(")\n\n");
|
|
|
|
/* Convert - sign - implicitly*/
|
|
printf("Converting SIGN implicitly: unsigned short -> short\n");
|
|
printf("This is done by issuing the statement: short aShort1 = aUShort;\n");
|
|
short aShort1 = aUShort;
|
|
printf("As a signed short data type, the variable aShort1 has the value %hi (hex: 0x", (signed short) aShort1);
|
|
show_bytes((byte_pointer) &aShort1, sizeof(signed short));
|
|
printf(")\n\n");
|
|
|
|
/* Convert - both: 1) size, 2) sign */
|
|
printf("Converting both SIZE and SIGN: short -> unsigned int\n");
|
|
printf("This is done by issuing the statement: unsigned aUInt = aShort;\n");
|
|
unsigned aUInt = aShort;
|
|
printf("As an unsigned int data type, the variable aUInt has the value %u (hex: 0x", aUInt);
|
|
show_bytes((byte_pointer) &aUInt, sizeof(unsigned));
|
|
printf(")\n\n");
|
|
|
|
/* One step at a time */
|
|
printf("One step at a time - First conversion is SIZE: (int) aShort = %d\n", (int) aShort);
|
|
printf("One step at a time - Second conversion is SIGN: (unsigned) (int) aShort = %u\n\n", (unsigned) (int) aShort);
|
|
|
|
/* Reverse the process and see what happens ... */
|
|
printf("What if ... First conversion is SIGN: (unsigned short) aShort = %hu\n", (unsigned short) aShort);
|
|
printf("What if ... Second conversion is SIZE: (unsigned int) (unsigned short) aShort = %d\n\n", (unsigned int) (unsigned short) aShort);
|
|
|
|
/* Convert - both: 1) size, 2) sign */
|
|
printf("Converting both SIZE and SIGN: short -> unsigned char\n");
|
|
printf("This is done by issuing the statement: unsigned char anUChar = aShort;\n");
|
|
unsigned char anUChar = aShort;
|
|
printf("As an unsigned char data type, the variable anUChar has the value %hhu (hex: 0x", anUChar);
|
|
show_bytes((byte_pointer) &anUChar, sizeof(unsigned char));
|
|
printf(")\n\n");
|
|
|
|
/* One step at a time */
|
|
printf("One step at a time - First conversion is SIZE: (signed char) aShort = %hhi\n", (signed char) aShort);
|
|
printf("One step at a time - Second conversion is SIGN: (unsigned char) (signed char) aShort = %hhu\n\n", (unsigned char) (signed char) aShort);
|
|
|
|
/* Reverse the process and see what happens ... */
|
|
printf("What if ... First conversion is SIGN: (unsigned short) aShort = %hu\n", (unsigned short) aShort);
|
|
printf("What if ... Second conversion is SIZE: (unsigned char) (unsigned short) aShort = %hhu\n\n", (unsigned char) (unsigned short) aShort);
|
|
|
|
return 0;
|
|
|
|
} |