计算机函数基础学,计算机基础学习日志(一)show-bytes函数

/* show-bytes - prints byte representation of data */

/* $begin show-bytes */

#include

/* $end show-bytes */

#include

#include

/* $begin show-bytes */

typedef unsigned char *byte_pointer;

//typedef char *byte_pointer;

//typedef int *byte_pointer;

void show_bytes(byte_pointer start, size_t len) {

size_t i;

for (i = 0; i < len; i++)

printf("%p\t0x%.2x\n", &start[i], start[i]);

printf("\n");

}

void show_int(int x) {

show_bytes((byte_pointer) &x, sizeof(int));

}

void show_float(float x) {

show_bytes((byte_pointer) &x, sizeof(float));

}

void show_pointer(void *x) {

show_bytes((byte_pointer) &x, sizeof(void *));

}

/* $end show-bytes */

/* $begin test-show-bytes */

void test_show_bytes(int val) {

int ival = val;

//float fval = (float) ival;

double fval = (double) ival;

int *pval = &ival;

printf("Stack variable ival = %d\n", ival);

printf("(int)ival:\n");

show_int(ival);

printf("(float)ival:\n");

show_float(fval);

printf("&ival:\n");

show_pointer(pval);

}

/* $end test-show-bytes */

void simple_show_a() {

/* $begin simple-show-a */

int val = 0x87654321;

byte_pointer valp = (byte_pointer) &val;

show_bytes(valp, 1); /* A. */

show_bytes(valp, 2); /* B. */

show_bytes(valp, 3); /* C. */

/* $end simple-show-a */

}

void simple_show_b() {

/* $begin simple-show-b */

int val = 0x12345678;

byte_pointer valp = (byte_pointer) &val;

show_bytes(valp, 1); /* A. */

show_bytes(valp, 2); /* B. */

show_bytes(valp, 3); /* C. */

/* $end simple-show-b */

}

void float_eg() {

int x = 3490593;

float f = (float) x;

printf("For x = %d\n", x);

show_int(x);

show_float(f);

x = 3510593;

f = (float) x;

printf("For x = %d\n", x);

show_int(x);

show_float(f);

}

void string_ueg() {

/* $begin show-ustring */

const char *s = "ABCDEF";

show_bytes((byte_pointer) s, strlen(s));

/* $end show-ustring */

}

void string_leg() {

/* $begin show-lstring */

const char *s = "abcdef";

show_bytes((byte_pointer) s, strlen(s));

/* $end show-lstring */

}

void show_twocomp()

{

/* $begin show-twocomp */

short x = 12345;

short mx = -x;

show_bytes((byte_pointer) &x, sizeof(short));

show_bytes((byte_pointer) &mx, sizeof(short));

/* $end show-twocomp */

}

int main(int argc, char *argv[])

{

int val = 12345;

if (argc > 1) {

val = strtol(argv[1], NULL, 0);

printf("calling test_show_bytes\n");

test_show_bytes(val);

} else {

printf("calling show_twocomp\n");

show_twocomp();

printf("Calling simple_show_a\n");

simple_show_a();

printf("Calling simple_show_b\n");

simple_show_b();

printf("Calling float_eg\n");

float_eg();

printf("Calling string_ueg\n");

string_ueg();

printf("Calling string_leg\n");

string_leg();

}

return 0;

}/* show-bytes - prints byte representation of data */

/* $begin show-bytes */

#include

/* $end show-bytes */

#include

#include

/* $begin show-bytes */

typedef unsigned char *byte_pointer;

//typedef char *byte_pointer;

//typedef int *byte_pointer;

void show_bytes(byte_pointer start, size_t len) {

size_t i;

for (i = 0; i < len; i++)

printf("%p\t0x%.2x\n", &start[i], start[i]);

printf("\n");

}

void show_int(int x) {

show_bytes((byte_pointer) &x, sizeof(int));

}

void show_float(float x) {

show_bytes((byte_pointer) &x, sizeof(float));

}

void show_pointer(void *x) {

show_bytes((byte_pointer) &x, sizeof(void *));

}

/* $end show-bytes */

/* $begin test-show-bytes */

void test_show_bytes(int val) {

int ival = val;

//float fval = (float) ival;

double fval = (double) ival;

int *pval = &ival;

printf("Stack variable ival = %d\n", ival);

printf("(int)ival:\n");

show_int(ival);

printf("(float)ival:\n");

show_float(fval);

printf("&ival:\n");

show_pointer(pval);

}

/* $end test-show-bytes */

void simple_show_a() {

/* $begin simple-show-a */

int val = 0x87654321;

byte_pointer valp = (byte_pointer) &val;

show_bytes(valp, 1); /* A. */

show_bytes(valp, 2); /* B. */

show_bytes(valp, 3); /* C. */

/* $end simple-show-a */

}

void simple_show_b() {

/* $begin simple-show-b */

int val = 0x12345678;

byte_pointer valp = (byte_pointer) &val;

show_bytes(valp, 1); /* A. */

show_bytes(valp, 2); /* B. */

show_bytes(valp, 3); /* C. */

/* $end simple-show-b */

}

void float_eg() {

int x = 3490593;

float f = (float) x;

printf("For x = %d\n", x);

show_int(x);

show_float(f);

x = 3510593;

f = (float) x;

printf("For x = %d\n", x);

show_int(x);

show_float(f);

}

void string_ueg() {

/* $begin show-ustring */

const char *s = "ABCDEF";

show_bytes((byte_pointer) s, strlen(s));

/* $end show-ustring */

}

void string_leg() {

/* $begin show-lstring */

const char *s = "abcdef";

show_bytes((byte_pointer) s, strlen(s));

/* $end show-lstring */

}

void show_twocomp()

{

/* $begin show-twocomp */

short x = 12345;

short mx = -x;

show_bytes((byte_pointer) &x, sizeof(short));

show_bytes((byte_pointer) &mx, sizeof(short));

/* $end show-twocomp */

}

int main(int argc, char *argv[])

{

int val = 12345;

if (argc > 1) {

val = strtol(argv[1], NULL, 0);

printf("calling test_show_bytes\n");

test_show_bytes(val);

} else {

printf("calling show_twocomp\n");

show_twocomp();

printf("Calling simple_show_a\n");

simple_show_a();

printf("Calling simple_show_b\n");

simple_show_b();

printf("Calling float_eg\n");

float_eg();

printf("Calling string_ueg\n");

string_ueg();

printf("Calling string_leg\n");

string_leg();

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值