文本和二进制的加密及获取二进制文件的大小

1.EOF

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。

2.函数feof  

函数原型: int feof(FILE *fp)

功能:判断文件是否结束

返回值:文件结束,返回真(非0),文件未结束,返回0

3.实例

  • 非密码加密  txt

    #define  _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    void jia(char *path,char *newpath)
    {
        FILE *pfr = fopen(path, "r");
        FILE *pfw = fopen(newpath, "w");
    
        char ch = 0;
        while (ch != EOF) //EOF 文件结束
        {
            ch = fgetc(pfr);//读取,EOF
            if (ch != EOF)
            {
                ch += 1;
                fputc(ch, pfw);
            }
    
        }
        fclose(pfr);
        fclose(pfw);
    
    }
    
    void jie(char *path, char* newpath)
    {
        FILE *pfr = fopen(path, "r");
        FILE *pfw = fopen(newpath, "w");
    
        char ch = 0;
        while (ch != EOF) //EOF 文件结束
        {
            ch = fgetc(pfr);//读取,EOF
            if (ch != EOF)
            {
                ch -= 1;
                fputc(ch, pfw);
            }
    
        }
    
        fclose(pfr);
        fclose(pfw);
    
    }
    
    void main()
    {
        char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.txt";
        char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.txt";
        char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.txt";
        jia(path, pathjia);
        jie(pathjia, pathjie);//路径
    
        system("pause");
    }
    
        system("pause");
    
    }
  • 根据密码加密  (二进制文件加密解密)

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.exe";
    char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.exe";
    char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.exe";
    
    void run(char *path, char *newpath)
    {
        FILE *pfr = fopen(path, "rb");
        FILE *pfw = fopen(newpath, "wb");
        if (pfr==NULL || pfw ==NULL)
        {
            return;
        }
        else
        {
            char  ch;
                while (!feof(pfr))
                {
                char ch = fgetc(pfr);
                char newch = ch ^ 3;
                fputc(newch, pfw);
                }
            fclose(pfr);
            fclose(pfw);
        }
    
    }
    
    void main()
    {
    
        run(path, pathjia);
        run(pathjia, pathjie);
        /*printf("%d", getfilesizeseek(path));*/
    
        system("pause");
    }

3.获取二进制文件的大小

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.exe";
char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.exe";
char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.exe";

int getfilesize(char *path)
{
    int i = -1;
    FILE *pfr = fopen(path, "rb");
    if (pfr == NULL )
    {
        return -1;
    }
    else
    {
        while (!feof(pfr))
        {
            char ch=fgetc(pfr);

            i++;//读取一个字符,前进一次
        }

        fclose(pfr);
        return i;
    }
}

int getfilesizeseek(char *path)
{

    FILE *pfr = fopen(path, "rb");
    if (pfr == NULL)
    {
        return -1;
    }
    else
    {
        fseek(pfr, 0, SEEK_END);//文件指针移动末尾
        int length = ftell(pfr);//获取当前文件指针距离开头的长度

        fclose(pfr);
        return length;

    }
}

int main()
{

    run(path, pathjia);
    run(pathjia, pathjie);
    /*printf("%d", getfilesizeseek(path));*/

    system("pause");
}
时间: 2024-08-11 09:55:45

文本和二进制的加密及获取二进制文件的大小的相关文章

文本与二进制方式打开文件的区别

文本与二进制方式打开文件的区别 文本文件也叫做ASCII码文件,与以‘文本方式’打开文件不是同一个概念!文本文件存储的是ASSCII码字符,即存储在磁盘上只占用二进制的0x20--0x7e.另外,还有回车(0x0d),换行(0x0a),TAB(0x09)等,所以有可压缩的空间. 换行和回车是不同的,而且在不同的操作系统,解释也不相同.‘\n’一般会操作系统被翻译成"行的结束",即LF(Line-Feed):‘\r’会被翻译成"回?,即CR(Cariage-Return) 回车

《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 &amp;&amp; 检查一个字符串是文本还是二进制

过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: import string allchars = string.maketrans('','') #all chars table def makefilter(keep): delchars = allchars.translate(allchars,keep) def thefilter(s): retu

关于前端使用JavaScript获取base64图片大小的方法

base64原理 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'=' 如何获取base64图片大小 通过base64编码原理我们知道,base64的图片字符流中的每8个字符就有两个是用0补充,而且字符流的末尾还可能存在'='号,我们可以通过这个原理计算图片的文件流大小. getImgByteSize(da

用fseek和ftell获取文件的大小

#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc,char *argv[]) { int n=0; FILE *fp; if((fp=fopen(argv[1],"r"))==NULL) { perror("fopen"); exit(EXIT_FAILURE); } if(fseek(fp,0,SEEK_END)!=0) {

ios获取缓存文件的大小并清除缓存

移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅读类app的标配功能. 今天介绍的离线缓存功能的实现,主要分为缓存文件大小的获取.清除缓存文件的实现. 1. 获取缓存文件的大小-( float )readCacheSize{    NSString *cachePath = [NSSearchPathForDirectoriesInDomains (

Android - 总结Activity与Fragment打开的时候获取组件的大小

Activity中获取 组件大小 代码: @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); Log.d("TAG", "A-button1-->"+button1); Log.d("TAG", "A-width-

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

BitmapFactory.Options详解 怎样获取图片的大小 遇到大一些的图片,遇到OOM(Out Of Memory)的问题

下面我们回到我们的主题上来:怎样获取图片的大小? 思路很简单: 首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了. 新问题又来了,在通过BitmapFactory.decodeFile(Stringpath)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题.怎么避免它呢? 这就用到了我们上面提到的BitmapFactory.Options这个类. Bitmap

获取android 内存大小

//来源于  http://www.linuxidc.com/Linux/2013-03/81232.htm public class memInfo { // 获得可用的内存  public static long getmem_UNUSED(Context mContext) { long MEM_UNUSED; // 得到ActivityManager ActivityManager am = (ActivityManager) mContext.getSystemService(Cont