1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <math.h>
4
5 #define BYTETOBINARYPATTERN "%d%d%d%d%d%d%d%d"
6
7 #define BYTETOBINARY(byte) \
8 (byte & 0x80 ? 1 : 0), \
9 (byte & 0x40 ? 1 : 0), \
10 (byte & 0x20 ? 1 : 0), \
11 (byte & 0x10 ? 1 : 0), \
12 (byte & 0x08 ? 1 : 0), \
13 (byte & 0x04 ? 1 : 0), \
14 (byte & 0x02 ? 1 : 0), \
15 (byte & 0x01 ? 1 : 0)
16
17 #define PRINTBIN(x) printf(BYTETOBINARYPATTERN, BYTETOBINARY(x));
18
19 void setlsbs(unsigned char *p, unsigned char b0);
20 unsigned char getlsbs(unsigned char *p);
21
22
23 int main(int argc, char **argv)
24 {
25 int seed;
26 int i;
27 unsigned char p[8];
28 unsigned char byte0 = random()%256;
29 unsigned char return_val;
30
31 sscanf(argv[1],"%d",&seed);
32 srandom(seed);
33
34 for(i = 0; i<8;i++)
35 {
36 p[i] = random()%256;
37 }
38
39 for(i = 0; i<8; i++)
40 {
41 printf("p[%d] = %d ",i,p[i]);
42 printf("binary format: "); PRINTBIN(p[i]); printf("\n");
43 }
44
45 printf("byte0 = %d ",byte0);
46 printf("binary format: "); PRINTBIN(byte0); printf("\n");
47
48 setlsbs(p,byte0);
49
50 for(i = 0; i<8; i++)
51 {
52 printf("p[%d] = %d ",i,p[i]);
53 printf("binary format: "); PRINTBIN(p[i]); printf("\n");
54 }
55
56 return_val = getlsbs(p);
57
58 printf("Return value of the call to getlsbs(): %d ", return_val);
59 printf("binary format: "); PRINTBIN(return_val); printf("\n");
60
61 return 0;
62 }
63
64
65
66 void setlsbs(unsigned char *p, unsigned char b0)
67 {
68 int i;
69 int n[8];
70 n[0] = (b0 & 0x01) == 0x01 ? 1:0;
71 n[1] = (b0 & 0x02) == 0x02 ? 1:0;
72 n[2] = (b0 & 0x04) == 0x04 ? 1:0;
73 n[3] = (b0 & 0x08) == 0x08 ? 1:0;
74 n[4] = (b0 & 0x10) == 0x10 ? 1:0;
75 n[5] = (b0 & 0x20) == 0x20 ? 1:0;
76 n[6] = (b0 & 0x40) == 0x40 ? 1:0;
77 n[7] = (b0 & 0x80) == 0x80 ? 1:0;
78
79 for(i = 0; i<8;i++)
80 {
81 /* modify the least significant bit of the byte */
82 int index = 1<<0;
83 if(n[i])
84 {
85 p[i] |= index;
86 }
87 else
88 {
89 p[i] &= ~index;
90 }
91 }
92 }
93
94 unsigned char getlsbs(unsigned char *p)
95 {
96 unsigned char ret_val = 0;
97 int i;
98 int temp;
99
100 for(i = 0; i<8 ;i++)
101 {
102 temp = ( (p[i] & 0x01) == 0x01 ? pow(2,i):0 );
103 ret_val += temp;
104 }
105
106 return ret_val;
107 }