C语言(文件的移位与加密解密)

C语言(文件的移位与加密解密),第1张

这道题,并不难,只是楼主,没有说清,是就字母移位吗?

但是看你的例子,有不全是。

程序如下:

#include <stdioh>

#include <stdlibh>

FILE source;//源文件

FILE destination;//目标文件

int key;//密钥

char file[100];//文件名

void encryption()//加密

{

char ch;

printf("请输入要加密的文件名\n");

scanf("%s",file);

if((source=fopen(file,"r"))==NULL)

{

printf("无法打开文件!\n");

exit(0);

}

printf("请输入加密后的文件名\n");

scanf("%s",file);

if((destination=fopen(file,"w"))==NULL)

{

printf("无法创建文件!\n");

exit(0);

}

printf("请输入密钥\n");

scanf("%d",&key);

ch=fgetc(source);

while(ch!=EOF)

{

if(ch=='\n')

{

fputc(ch,destination);

ch=fgetc(source);

continue;

}

ch+=key;

fputc(ch,destination);

ch=fgetc(source);

}

fclose(source);

fclose(destination);

}

void decrypt()//解密

{

char ch;

printf("请输入要解密的文件名\n");

scanf("%s",file);

if((source=fopen(file,"r"))==NULL)

{

printf("无法打开文件!\n");

exit(0);

}

printf("请输入加密后的文件名\n");

scanf("%s",file);

if((destination=fopen(file,"w"))==NULL)

{

printf("无法创建文件!\n");

exit(0);

}

printf("请输入密钥\n");

scanf("%d",&key);

ch=fgetc(source);

while(ch!=EOF)

{

if(ch=='\n')

{

fputc(ch,destination);

ch=fgetc(source);

continue;

}

ch-=key;

fputc(ch,destination);

ch=fgetc(source);

}

fclose(source);

fclose(destination);

}

int main()//主函数提供菜单

{

int choice=0;

printf("\n");

printf("1 文件加密\n");

printf("2 文件解密\n");

printf("3 退出\n");

printf("\n");

printf("请输入1 2 3选择 *** 作\n");

scanf("%d",&choice);

switch(choice)

{

case 1:encryption();break;

case 2:decrypt();break;

case 3:break;

}

return 0;

}

楼主大致思路是对的。

第一:移位程序是对的。

第二,失误在调用y=seqshift(x,n,3)返回量选择与stem(n,x)选择错误的横纵标量。

修订如下:

%赋初始序列

n=0:9;

x1=[(n-0)==0];

x2=2[(n-1)==0];

x3=3[(n-2)==0];

x4=4[(n-3)==0];

x5=5[(n-4)==0];

x=x1+x2+x3+x4+x5;

%画原始信号序列

subplot(2,1,1);

stem(n,x);

xlabel('n');

ylabel('x');

axis([0,12,0,5]);

title('x(n)');

%画移位序列

[y,ny]=seqshift(x,n,3);

subplot(2,1,2);

stem(ny,y);

xlabel('n');

ylabel('y');

axis([0,12,0,5]);

title('x(n-3)');

网速不给力,图就不粘上去了,自己运行下。

结果可详询qq814468671索要。

如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa

从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。

例如:

unsigned char a;

a=1; //0b00000001

a<<=1; //0b00000010 a左移1位等效于a=a2

a<<=2; //0b00001000 a左移2位等效于a=a2的2次方(4)

a<<=3; //0b01000000 a左移1位等效于a=a2的3次方(8)

a<<=1; //0b10000010 a左移1位等效于a=a2

a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了

c=a<<b; 在变量都是8位的时候,等效于 c=(apow(2,b))%256

这个就是跑马灯程序嘛,你看看 我写的:

#include <REGX52H>

#include <intrinsH> 这个是调用单片机头文件里面的函数,你自己查查书籍啊,要调用的话就要写这个头文件 本程序 调用的移位函数啦 就是左右移动函数

#define uchar unsigned char

#define uint unsigned int

uchar aa ;

void delay(uint z ) //延时程序,延时准确为1MS;

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--) ;

}

void main()

{

uint i,j;

while(1)

{

aa=0xfe;因为要亮一个灯撒 所以就是1111 1110呀 这就是0xfe的含义啊

for(i=8;i>0;i--) //左移程序

{

P2=aa;

delay(500) ;

aa=_crol_(aa,1);这个就是调用函数的使用方法,这个是左移动一位,意思是把aa左移一位 在赋值给aa哦,这样再P2=aa;不就把移动的数据传到P2口了吗,懂了吧

}

aa=0x7f;这个因要亮一个等 也是一样的道理0111 1111是吧 就是0x7f 啦

for(i=7;i>0;i--) //右移程序

{

P2=aa;

delay(500) ;

aa=_cror_(aa,1);这里用法还是与左移动一样的道理 ,

}

}

}

#include "Stdioh"

main()

{

int i,n,k;

int a[100],b[50]; /定义一个数组/

printf("please input n:\n");

scanf("%d",&n);

printf("please input %d numbers:\n",n);

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

scanf("%d",&a[i]);/给数组赋n个值/

printf("please input k:\n");

scanf("%d",&k);

for(i=n-k;i<n;i++)

b[i-n+k]=a[i];/将a数组后面k个元素移到b数组里面/

for(i=n-k-1;i>=0;i--)

a[i+k]=a[i];/数组开始右移/

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

a[i]=b[i];/数组b的元素放回数组a/

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

printf("%d, ",a[i]);

getch();

}

--------------

运行结果:

please input n:

6

please input 6 numbers:

10 20 30 40 50 60

please input k:

3

40,50,60,10,20,30,

以上就是关于C语言(文件的移位与加密解密)全部的内容,包括:C语言(文件的移位与加密解密)、matlab程序求教,编了一个移位的通用函数,但是运行了没效果,程序如下,求大神指教、想知道单片机》《移位符号的用法。想要实例就这个程序希望大家给一些解释。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9879375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存