CSC373/406: Integers: Show Bytes [8/9] Previous pageContentsNext page

file:show-bytes.c [source]
00001: #include <stdio.h>
00002: typedef unsigned char *byte_pointer;
00003: 
00004: void show_bytes(byte_pointer start, int len) {
00005:   int i;
00006:   for (i=0; i<len; i++) {
00007:     printf("%.2x", start[i]); 
00008:     printf(" ");
00009:   }
00010: }
00011: void show_int(int x)       { show_bytes((byte_pointer) &x, sizeof(int)); }
00012: void show_float(float x)   { show_bytes((byte_pointer) &x, sizeof(float)); }
00013: void show_pointer(void *x) { show_bytes((byte_pointer) &x, sizeof(void *)); }
00014: 
00015: void print_binary(int x) {
00016:   int size = (sizeof x) * 8;  // makes this machine-independent
00017:   // 2's complement
00018:   if (x<0) printf("1");
00019:   else printf("0");
00020:   int i;
00021:   int mask = 1;
00022:   for (i=1; i<size-1; i++)
00023:     mask = mask << 1;
00024:   for (i=1; i<size; i++) {
00025:     if (x&mask) printf("1");
00026:     else printf("0");
00027:     mask = mask >> 1;
00028:   }
00029: }
00030: 

file:show-bytes-eg.c [source]
00001: #include <stdio.h>
00002: #include <string.h>
00003: 
00004: #include "show-bytes.c"
00005: 
00006: void test_show_bytes(int val)
00007: {
00008:     int ival = val;
00009:     show_int(ival);
00010:     print_binary(ival);
00011:     printf ("\n");
00012: 
00013:     float fval = (float) ival;
00014:     show_float(fval);
00015:     printf ("\n");
00016: 
00017:     int *pval = &ival;
00018:     show_pointer(pval);
00019:     printf ("\n");
00020: }
00021: 
00022: void simple_show()
00023: {
00024:     int val = 0x12345678;
00025:     byte_pointer valp = (byte_pointer) &val;
00026:     show_bytes(valp, 1); /* A. */
00027:     printf ("\n");
00028:     show_bytes(valp, 2); /* B. */
00029:     printf ("\n");
00030:     show_bytes(valp, 3); /* C. */
00031:     printf ("\n");
00032: }
00033: 
00034: void float_eg()
00035: {
00036:     int x = 3490593;
00037:     float f = (float) x;
00038:     show_int(x);
00039:     printf ("\n");
00040:     show_float(f);
00041:     printf ("\n");
00042: }
00043: 
00044: void string_eg()
00045: {
00046:     char *s = "ABCDEF";
00047:     show_bytes((unsigned char *)s, (int) strlen(s)+1); 
00048:     printf ("\n");
00049: }
00050: 
00051: void show_twocomp() 
00052: {
00053:     short int x = 12345; 
00054:     short int mx = -x; 
00055:     
00056:     show_bytes((byte_pointer) &x, sizeof(short int)); 
00057:     printf ("\n");
00058:     show_bytes((byte_pointer) &mx, sizeof(short int)); 
00059:     printf ("\n");
00060: }
00061: 
00062: int main(int argc, char *argv[])
00063: {
00064:     int val = 12345;
00065: 
00066:     if (argc > 1) {
00067:       if (argv[1][0] == '0' && argv[1][1] == 'x')
00068:   sscanf(argv[1]+2, "%x", &val);
00069:       else
00070:   sscanf(argv[1], "%d", &val);
00071:       printf("Calling test_show_bytes\n");
00072:       test_show_bytes(val);
00073:     } else {
00074:       printf("Calling show_twocomp\n");
00075:       show_twocomp();
00076:       printf("Calling simple_show\n");
00077:       simple_show();
00078:       printf("Calling float_eg\n");
00079:       float_eg();
00080:       printf("Calling string_eg\n");
00081:       string_eg();
00082:     }
00083:     return 0;
00084: }
00085: 

Previous pageContentsNext page