查看: 399|回复: 0

[原创图文] 逆向学习第15天_指针学习

[复制链接]

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
242
荣耀
0
rank
0
违规
0
发表于 2020-11-9 21:49:17 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-11-9 21:49 编辑

1、使用char*类型的指针变量对一个int类型的变量在4个字节上高低位按单字节交换:
例如:将int i=0x12345678,用指针char*变量进行按字节交换后变成0x78563412
//1、使用char*类型的指针变量对一个int类型的变量在4个字节上高低位按单字节交换:
//例如:将int i=0x12345678,用指针char*变量进行按字节交换后变成0x78563412
#include<stdio.h>
int main()
{
        int i = 0x12345678;
        char *p;
        int n = 2;
        p =(char *) &i;
        char t;
        t = p[0];
        p[0] = p[3];
        p[3] = t;

        t = p[1];
        p[1] = p[2];
        p[2] = t;
        return 0;
}

逆向学习第15天_指针学习

逆向学习第15天_指针学习

2、使用short*类型的指针变量对一个int类型的变量在个字节上高低位按双字节交换:
例如:将int i = 0x12345678,用指针short*变量进行按字节交换后变成:0x56781234
//2、使用short*类型的指针变量对一个int类型的变量在个字节上高低位按双字节交换:
//例如:将int i = 0x12345678,用指针short*变量进行按字节交换后变成:0x56781234
#include<stdio.h>
int main()
{
        int i = 0x12345678;
        short *p=(short *)&i;
        short s;
        s = p[0];
        p[0] = p[1];
        p[1] = s;
        printf("%x", i);
        return 0;
}

逆向学习第15天_指针学习

逆向学习第15天_指针学习

3、正常情况下,我们无法对一个整数的数组一次性输入所有数值。
为了解决这问题,可以先输入包含多个至格作为间隔的连续数字,通过gets函数一次性接收下来。
将输入的字符串循环调用strtok函数进行拆分,把拆分后的小字符事转化为数学,再打印“你输入了x个数字,这些数字的平均值是:xxx
int a[10];
char s[100];
printf(”请随意输入1到10个整数:[以空格间隔]");
gets(s);
while
(..).strtok
(strtok函数的用法要自己根据ISDN说明和例子自己研究明白)
//3、正常情况下,我们无法对一个整数的数组一次性输入所有数值。
//为了解决这问题,可以先输入包含多个至格作为间隔的连续数字,通过gets函数一次性接收下来。
//将输入的字符串循环调用strtok函数进行拆分,把拆分后的小字符事转化为数学,再打印“你输入了x个数字,这些数字的平均值是:xxx
//int a[10];
//char s[100];
//printf(”请随意输入1到10个整数:[以空格间隔]");
//gets(s);
//while
//(..).strtok
//(strtok函数的用法要自己根据ISDN说明和例子自己研究明白)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
        int a[10];
        char s[100];
        int i = 0;
        printf("请随意输入1到10个整数:[以空格间隔]\n");
        gets_s(s);
        char *p=strtok(s, " ");
        double sum = 0.0;
        while (p)
        {
                a = atoi(p);
                sum += a;
                p = strtok(NULL, " ");
                ++i;
        }
        printf("您输入了%d个数字,平均值是%0.2lf", i, sum/i);
        return 0;
}

逆向学习第15天_指针学习

逆向学习第15天_指针学习

(int)与atoi的区别:
(int)只针对某一个元素进行转换,且遇到double、float时,只保留整数位
atoi是对整个进行元素类型转换的

逆向学习第15天_指针学习

逆向学习第15天_指针学习

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
微信公众号
快速回复 返回顶部 返回列表