ATA(代码)

原创 2007年09月22日 23:19:00
  1. 编码转换:GBK码转UCS2码    和 UCS2码转GBK码(第一次用类来写,封装得很糟糕)
  2. #include <string.h>
    #include <iostream.h>

    #define N 100
    class coding
    {
    public:
        coding()
        {
           
        }
        ~coding()
        {

        }
        void Initunstr(char *string)
        {
           
            unstr=string;
            length=strlen(unstr);
        }
        void Initstr(char *string)
        {
            str=string;
            length=strlen(string);
        }
        void UCS2_GBK()
        {
            if(length == 0)
                exit(1);
            char buf[N];
            ZeroMemory(buf,N);        
            int i,len;
            //高低字节交换位置
            for(i = 0; i < length-1; i += 2)
            {
                buf[i+1]=unstr[i];
                buf[i]=unstr[i+1];
            }
            len = WideCharToMultiByte(CP_ACP, 0L, (unsigned short *)&buf[0], -1, unstr, 0, NULL, NULL);  
            str=(char *)malloc(len*sizeof(char)+1);
            WideCharToMultiByte(CP_ACP, 0L, (unsigned short *)&buf[0], -1, str, len, NULL, NULL);       

        }
        void GBK_UCS2()
        {
            if(!length)
                exit(1);
            char buf[N],*buftemp;
            ZeroMemory(buf,N);
            int i, len;
            len=MultiByteToWideChar(CP_ACP,0L,str,-1, (unsigned short *)&buf[0], 0);
            MultiByteToWideChar(CP_ACP,0L,str,-1, (unsigned short *)&buf[0], len);
            unstr=(char *)malloc(2*len*sizeof(char));
            buftemp=(char *)malloc(2*len*sizeof(char));
           
            len--;
            for(i=0;i < (len*2); i += 2)
            {
                buftemp[i]=buf[i+1];
                buftemp[i+1]=buf[i];
            }
            for(i=0;i< 2*len;i++)

                unstr[i]=buftemp[i];
            unstr[i]='/0';

           
        }
        char * getstr()
        {
            return str;
        }
        char* getunstr()
        {
            return unstr;
        }
    private:
       
        char *str;
        char *unstr;
        int length;
    };   

    /*int main()
    {
        coding code;
        char *string=new char(N);
        cin>>string;
        code.Initunstr(string);
        code.UCS2_GBK();
    //    code.printstr();
    //    code.Initstr("慢");
    //    code.GBK_UCS2();
        string=code.getstr();
        cout<<string<<endl;
        code.Initstr(string);
        code.GBK_UCS2();
        cout<<code.getunstr()<<endl;
        return 0;
    }*/
  3. MD5算法加密  核心是网上搜来的,里面涉及到很多宏定义,本想拆成const,但是这个编译时还有类型检查,很难实现,于是就放一块了,做成了.hpp文件,直接调用函数就好
  4. /*我做的修改就是接口的更改!**/
    /*让它接受已个字符串然后将该字符串加密处理的信息以字符串形式输出*/
    /*设计思想是通过中间文件进行转换,先将字符串写入文件,再让代码处理文件加密,再将加密信息读入文件,再将信息从文件中读出*/
    /*这个是HPP文件,也就是算法的实现过程,test是个测试函数*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>

    #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
    #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
    #define H(x, y, z) ((x) ^ (y) ^ (z))
    #define I(x, y, z) ((y) ^ ((x) | (~z)))

    #define RL(x, y) (((x) << (y)) | ((x) >> (32 - (y))))  //x向左循环移y位

    #define PP(x) (x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24)  //将x高低位互换,例如PP(aabbccdd)=ddccbbaa

    #define FF(a, b, c, d, x, s, ac) a = b + (RL((a + F(b,c,d) + x + ac),s))
    #define GG(a, b, c, d, x, s, ac) a = b + (RL((a + G(b,c,d) + x + ac),s))
    #define HH(a, b, c, d, x, s, ac) a = b + (RL((a + H(b,c,d) + x + ac),s))
    #define II(a, b, c, d, x, s, ac) a = b + (RL((a + I(b,c,d) + x + ac),s))

    unsigned A,B,C,D,a,b,c,d,i,len,flen[2],x[16];   //i临时变量,len文件长,flen[2]为64位二进制表示的文件初始长度
    char FileName[]="temp.dat";   //文件名
    FILE *fp;
    void ChangeToFile(const char *s)
    {
        fp=fopen(FileName,"w+");
        if(fp==NULL)
        {
            printf("The temp file can't creat!/n");
            exit(0);
        }
        else
        {
            fprintf(fp,"%s",s);
            fclose(fp);
        }
    }

    //MD5核心算法,供64轮
    void exchange()
    {                

      a=A;b=B;c=C;d=D;
      /**//* Round 1 */
      FF (a, b, c, d, x[ 0],  7, 0xd76aa478); /**//* 1 */
      FF (d, a, b, c, x[ 1], 12, 0xe8c7b756); /**//* 2 */
      FF (c, d, a, b, x[ 2], 17, 0x242070db); /**//* 3 */
      FF (b, c, d, a, x[ 3], 22, 0xc1bdceee); /**//* 4 */
      FF (a, b, c, d, x[ 4],  7, 0xf57c0faf); /**//* 5 */
      FF (d, a, b, c, x[ 5], 12, 0x4787c62a); /**//* 6 */
      FF (c, d, a, b, x[ 6], 17, 0xa8304613); /**//* 7 */
      FF (b, c, d, a, x[ 7], 22, 0xfd469501); /**//* 8 */
      FF (a, b, c, d, x[ 8],  7, 0x698098d8); /**//* 9 */
      FF (d, a, b, c, x[ 9], 12, 0x8b44f7af); /**//* 10 */
      FF (c, d, a, b, x[10], 17, 0xffff5bb1); /**//* 11 */
      FF (b, c, d, a, x[11], 22, 0x895cd7be); /**//* 12 */
      FF (a, b, c, d, x[12],  7, 0x6b901122); /**//* 13 */
      FF (d, a, b, c, x[13], 12, 0xfd987193); /**//* 14 */
      FF (c, d, a, b, x[14], 17, 0xa679438e); /**//* 15 */
      FF (b, c, d, a, x[15], 22, 0x49b40821); /**//* 16 */

     /**//* Round 2 */
      GG (a, b, c, d, x[ 1],  5, 0xf61e2562); /**//* 17 */
      GG (d, a, b, c, x[ 6],  9, 0xc040b340); /**//* 18 */
      GG (c, d, a, b, x[11], 14, 0x265e5a51); /**//* 19 */
      GG (b, c, d, a, x[ 0], 20, 0xe9b6c7aa); /**//* 20 */
      GG (a, b, c, d, x[ 5],  5, 0xd62f105d); /**//* 21 */
      GG (d, a, b, c, x[10],  9, 0x02441453); /**//* 22 */
      GG (c, d, a, b, x[15], 14, 0xd8a1e681); /**//* 23 */
      GG (b, c, d, a, x[ 4], 20, 0xe7d3fbc8); /**//* 24 */
      GG (a, b, c, d, x[ 9],  5, 0x21e1cde6); /**//* 25 */
      GG (d, a, b, c, x[14],  9, 0xc33707d6); /**//* 26 */
      GG (c, d, a, b, x[ 3], 14, 0xf4d50d87); /**//* 27 */
      GG (b, c, d, a, x[ 8], 20, 0x455a14ed); /**//* 28 */
      GG (a, b, c, d, x[13],  5, 0xa9e3e905); /**//* 29 */
      GG (d, a, b, c, x[ 2],  9, 0xfcefa3f8); /**//* 30 */
      GG (c, d, a, b, x[ 7], 14, 0x676f02d9); /**//* 31 */
      GG (b, c, d, a, x[12], 20, 0x8d2a4c8a); /**//* 32 */

      /**//* Round 3 */
      HH (a, b, c, d, x[ 5],  4, 0xfffa3942); /**//* 33 */
      HH (d, a, b, c, x[ 8], 11, 0x8771f681); /**//* 34 */
      HH (c, d, a, b, x[11], 16, 0x6d9d6122); /**//* 35 */
      HH (b, c, d, a, x[14], 23, 0xfde5380c); /**//* 36 */
      HH (a, b, c, d, x[ 1],  4, 0xa4beea44); /**//* 37 */
      HH (d, a, b, c, x[ 4], 11, 0x4bdecfa9); /**//* 38 */
      HH (c, d, a, b, x[ 7], 16, 0xf6bb4b60); /**//* 39 */
      HH (b, c, d, a, x[10], 23, 0xbebfbc70); /**//* 40 */
      HH (a, b, c, d, x[13],  4, 0x289b7ec6); /**//* 41 */
      HH (d, a, b, c, x[ 0], 11, 0xeaa127fa); /**//* 42 */
      HH (c, d, a, b, x[ 3], 16, 0xd4ef3085); /**//* 43 */
      HH (b, c, d, a, x[ 6], 23, 0x04881d05); /**//* 44 */
      HH (a, b, c, d, x[ 9],  4, 0xd9d4d039); /**//* 45 */
      HH (d, a, b, c, x[12], 11, 0xe6db99e5); /**//* 46 */
      HH (c, d, a, b, x[15], 16, 0x1fa27cf8); /**//* 47 */
      HH (b, c, d, a, x[ 2], 23, 0xc4ac5665); /**//* 48 */

      /**//* Round 4 */
      II (a, b, c, d, x[ 0],  6, 0xf4292244); /**//* 49 */
      II (d, a, b, c, x[ 7], 10, 0x432aff97); /**//* 50 */
      II (c, d, a, b, x[14], 15, 0xab9423a7); /**//* 51 */
      II (b, c, d, a, x[ 5], 21, 0xfc93a039); /**//* 52 */
      II (a, b, c, d, x[12],  6, 0x655b59c3); /**//* 53 */
      II (d, a, b, c, x[ 3], 10, 0x8f0ccc92); /**//* 54 */
      II (c, d, a, b, x[10], 15, 0xffeff47d); /**//* 55 */
      II (b, c, d, a, x[ 1], 21, 0x85845dd1); /**//* 56 */
      II (a, b, c, d, x[ 8],  6, 0x6fa87e4f); /**//* 57 */
      II (d, a, b, c, x[15], 10, 0xfe2ce6e0); /**//* 58 */
      II (c, d, a, b, x[ 6], 15, 0xa3014314); /**//* 59 */
      II (b, c, d, a, x[13], 21, 0x4e0811a1); /**//* 60 */
      II (a, b, c, d, x[ 4],  6, 0xf7537e82); /**//* 61 */
      II (d, a, b, c, x[11], 10, 0xbd3af235); /**//* 62 */
      II (c, d, a, b, x[ 2], 15, 0x2ad7d2bb); /**//* 63 */
      II (b, c, d, a, x[ 9], 21, 0xeb86d391); /**//* 64 */

      A += a;
      B += b;
      C += c;
      D += d;

    }

    void md5(char strDest[33], const char *strSour)
    {
        assert( (strDest!=NULL) && (strSour != NULL));
        int i;
        ChangeToFile(strSour);
        fp=fopen(FileName,"rb");
        if(fp == NULL)
        {
            printf("can't open the temp file!/n");
            exit(0);
        }
        fseek(fp, 0, SEEK_END);  //文件指针转到文件末尾
        if((len=ftell(fp))==-1)
        {
            printf("Sorry! Can not calculate files which larger than 2 GB!/n");
            fclose(fp);
            exit(0);
        }  //ftell函数返回long,最大为2GB,超出返回-1
        rewind(fp);  //文件指针复位到文件头
        A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476; //初始化链接变量
        flen[1]=len/0x20000000;     //flen单位是bit
        flen[0]=(len%0x20000000)*8;
        memset(x,0,64);   //初始化x数组为0
        fread(&x,4,16,fp);  //以4字节为一组,读取16组数据
        for(i=0;i<len/64;i++)
        {    //循环运算直至文件结束
          exchange();
          memset(x,0,64);
          fread(&x,4,16,fp);
        }
        ((char*)x)[len%64]=128;  //文件结束补1,补0操作,128二进制即10000000
        if(len%64>55)
        {
            exchange();
            memset(x,0,64);
        }
        memcpy(x+14,flen,8);    //文件末尾加入原文件的bit长度
        exchange();
        fclose(fp);
        fp=fopen(FileName,"wr");
        fprintf(fp,"%08x",PP(A));
        fprintf(fp,"%08x",PP(B));
        fprintf(fp,"%08x",PP(C));
        fprintf(fp,"%08x",PP(D));
        fclose(fp);
        fp=fopen(FileName,"r");

        for(i=0;i<32;i++)
            strDest[i]=fgetc(fp);       
       
        strDest[i]='/0';
        fclose(fp);

       
    }
  5. 协议:不是按要求做的,只能说是个人力的浪费,就不说了

ATA标准规范文件说明及下载

ATA-5标准规范文档(下文简称ATA-5文档)是我工作以后用到的第一份比较全面而复杂的标准文档。这份文档,在我第一份工作近三年的时间内被我反复的阅读和使用。在它的指导下,我完成了一款ATA设备端产品...
  • jw212
  • jw212
  • 2010年08月26日 15:10
  • 3519

IDE(ATA),SATA,SCSI的区别

目前有好几种:IDE(ATA)硬盘,SATA硬盘,SCSI硬盘和SAS硬盘。  IDE:     IDE硬盘也叫ATA硬盘,是采用并行传输技术的硬盘。IDE的英文全称为“Integrated ...
  • duomoke
  • duomoke
  • 2014年03月24日 11:05
  • 2755

VMware 中很多ATA ChannelX 问题解决方法

出现这种情况的原因,我也不知道,但是我尝试很多种方法,但是可以肯定的是,出现这种情况与 “硬盘”接口没有任何关系,这个尝试了很多次都无济于事。 后来被逼着去官网查问题: h...
  • qq5132834
  • qq5132834
  • 2016年01月23日 10:37
  • 2348

手机ATA测试

ATA工具使用方法。
  • yanlaifan
  • yanlaifan
  • 2016年01月29日 16:18
  • 2222

A'A和AA'拥有相同的非零特征值的证明

假设A是一个m×nm\times n的矩阵,记A的转置为ATA^{T}。 首先证明r(AAT)=r(ATA)=r(A)=r(AT)r(AA^{T})= r(A^{T}A)=r(A)=r(A^T). ...
  • zhengjihao
  • zhengjihao
  • 2017年04月12日 22:49
  • 1240

MTK平台ATA测试LCM出现Not Support

一、问题描述: 使用MTK的ATA测试工具测试LCM时提示“Not Support” ATA是指:Assembly(安装) Test Assistant Tool  背景介绍: 一供L...
  • u012900947
  • u012900947
  • 2016年11月26日 13:03
  • 1468

ATA接口寄存器详解

3、ATA接口的三种数据传输方式   (1)PIO(Programmable Input-Output)传输,可以分为PIO寄存器传输和PIO数据传输。PIO寄存器传输主要用于对ATA设备...
  • zhengzhoudaxue2
  • zhengzhoudaxue2
  • 2014年11月24日 15:21
  • 2478

ata驱动框架

这里所说的ATA Disk包含两大类:一类是传统的并行ATA(PATA),即IDE接口;另一类是目前流行的串行ATA(SATA)。对于IDE的驱动,Linux-2.6.28还进行了保留,其可以驱成传统...
  • Morphad
  • Morphad
  • 2014年03月21日 09:39
  • 1707

ATA和ATAPI类型硬盘区别方法

ATA和ATAPI类型硬盘区别方法2010-05-21 17:48目前,计算机主板IDE控制器连接的硬盘有ATA(AT Attachment)类型和ATAPI(AT Attachment Packet...
  • jw212
  • jw212
  • 2010年08月26日 17:37
  • 3283

ATA/SATA/SCSI/SAS/FC总线简介

ATA/SATA/SCSI/SAS/FC都是应用于存储领域的总线,在当今的存储系统中,普遍应用的硬盘接口主要有SATA、SCSI、SAS和FC,ATA比较古老,在一些老的低端存储系统中被广泛应用,目前...
  • computer055maxi
  • computer055maxi
  • 2010年10月29日 11:53
  • 5522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ATA(代码)
举报原因:
原因补充:

(最多只允许输入30个字)