2018-2019-1 20165324 《信息安全系统设计基础》第三周课堂练习
任务一
- 调用附图代码,编写一个程序“week0202学号.c",用show_int(),show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。
- 提交运行结果截图,要全屏,要包含自己的学号信息
- 课下把代码推送到代码托管平台
- 参考教材p82,给出出匹配的位序列的推导过程
- 代码及截图如下:
#include <stdio.h>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start,size_t len)
{
size_t i;
for (i=0;i<len;i++)
printf("%.2x",start[i]);
printf("
");
}
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 *));
}
void test_show_bytes(int val)
{
int ival=val;
float fval=(float)val;
int *pval = &ival;
show_int(ival);
show_float(fval);
show_pointer(pval);
}
main()
{
char c=0x12345678;
show_int(c);
if(c==0x12)
printf("20155337是大端
");
else
printf("20155337是小端
");
实践二
- 调用附图代码,编写一个程序 “week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。
- 提交运行结果截图,要全屏,要包含自己的学号信息
- 代码及截图如下:
#include <stdio.h>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start,size_t len)
{
size_t i;
for (i=0;i<len;i++)
printf("%.2x",start[i]);
printf("
");
}
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 *));
}
void test_show_bytes(int val)
{
int ival=val;
float fval=(float)val;
int *pval = &ival;
show_int(ival);
show_float(fval);
show_pointer(pval);
}
int main()
{
int x=5337;
test_show_bytes(x);
}
任务三
- 编写一个程序 “week0203学号.c",运行下面代码:
1 short int v = -学号后四位
2 unsigned short uv = (unsigned short) v
3 printf("v = %d, uv = %u
", v, uv);
-
在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息
-
分析p /x v; p /x uv 与程序运行结果的不同和联系
-
代码及截图如下:
#include <stdio.h>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start,size_t len)
{
size_t i;
for (i=0;i<len;i++)
printf("%.2x",start[i]);
printf("
");
}
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 *));
}
void main()
{
short int v = -学号后四位
unsigned short uv = (unsigned short) v
printf("v = %d, uv = %u
", v, uv);
}