zoukankan      html  css  js  c++  java
  • 类型转换

    这一周差不多都在做一件事情,也是第一次跟着老师。没想到自己的反应会这么慢,基础更是差的不能提。下面代码吧。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>     //使用memset
    
    typedef   char     BYTE;    //1byte
    
    void main()
    {
    	int i, j;		/*	定义两个整型变量	*/
    
    	FILE *fpBin, *fpTxt;		/*	定义两个文件型指针变量	*/
    
    	BYTE *data = (BYTE *)malloc(4);	/*	定义字符指针,申请了一个指针,指向的内存为4字节,每个字符仍是占一个字节
    							* 对应的用完需要释放,释放需要用到free(data)	
    							*相当于char data[4];
    							*/
    
    	
    	if(NULL == (fpBin = fopen(".\\sample", "rb")))	/*	判断用fopen打开的文件流是否为空,fpopen("路径及所要打开的文件名","打开方式")
    									 * 在此为用二进制方式打开sample文件,并把读到地结果放到bpBin。
    									 */
    													 
    	{
    		printf("二进制文件打开失败!\n");  /*	如果文件为空无法读取,或者路径出错则弹出出错提示	*/
    		return;
    	}
    	if(NULL == (fpTxt = fopen(".\\sample.txt", "w")))  /*	语句格式同上。意义:写入sample.txt数据,如果没有这个文件则会重新建立一个。*/
    	{
    		printf("文本文件打开失败!\n");		/*	如果文件为空无法写入,或者路径出错则弹出出错提示	*/
    		return;
    	}
    
    	for(i=0; i<400; i++)				/* 控制外面的400行循环 */
    	{
    		for(j=0; j<640; j++)			/* 内重循环640行 */
    		{
    			memset(data, 0, 4);			/* *data进行初始化 */
    
    			fread(data, 1, 1, fpBin);	/* 把fpBin里面的数据放到data里面 
    								 * 第一个参数是指要把读到的文件存放的地方
    								 * 第二个是指这种类型在内存中占多少字节,如果不知道可以写sizeof(类型名)
    								 * 第三个是指一次读取的字节数	
    								 * 第四个是指从谁读取
    								 */		
    			
    			itoa(*data, data, 10);		/* 把*data里面的数据转换为十进制放入到data里面
    								 * 第一个参数是要转换的数据,第二个参数要是存放数据的地址,第三个是要进行转换的进制
    								 */
    
    
    			fwrite(data, 1, 4, fpTxt);	/* 把读到的data里面的数据写入到fpTxt里面
    								*
    								* 第一个参数是要写的数据地址
    								* 第二个参数是要读取的字节数,也就是每次要写的字节数
    								* 第三个是要读字节所占的内存空间的大小,也就是每次要对字节进行写入的次数
    								* 第四个是要把读出来的数据写到的地方
    								* 第二个参数和第三个参数的乘积就是要写入的位数
    								 */
    		   
    		}
    		*data = '\n';          /*	把数据*data后面补一个换行符也就是第640列的时候换到下一行 */
    		fwrite(data, 1, 1, fpTxt);	/*	换回车换行符写到fpTxt里面	*/
    	}
    
    	fclose(fpBin);	/*	关闭文件fpBin */
    	fclose(fpTxt);	/*  关闭文件fpTxt */
    	free(data);		/*	释放data*/
    }
    
    


     

    首先:第一行:他写的是typedef   char    BYTE;    //1byte

                                BYTE *data = (BYTE*)malloc(4);

    我觉得没有必要,明明一句就可以得来的,什么要分两句写呢,然后就问了一下别人。才知道,是考虑到程序的可移值性,不同平台之间所分配的空间可能不一样。这样一来比较容易移植。顺便让我看了一下匈牙利命名法。


    然后:malloc这个函数指向系统申请分配指定长度字节的内存空间…表面上一看能理解,其实不是我想的那样,因为我表达的类型是不是致的,思考就错了。分配的空间是连续的。而这里指的是一个变量所占的连续空间。

    后来问的另一种写法

    Typedef doubleDWORD

    DWORD *data1=( DWORD*)malloc(400*460*sizeof(DWORD))自己就不是很理解,我可以理解是分配连续全部的空间,但是为什么后面还要加一个长度?问张他说别人都这么写的,也不是很清楚。

    不理解指针,重新的补了一下,还是觉得理解的不好,很浅。不是很明白他对内存的操作,不会调程序(不能没有把操作系统,组成原理,接口,系统结构联系起来,虽然现在不用,但是我需要慢慢的把它们全部的联系到一起。不然,以后还是会遇到更多的问题)

    明白什么是指针,什么是指针变量。及一般的使用方法。

    接着就是文件,发现自己的书开始就没有完全的看明白。

    跟同学交流的时候,然后才觉得自己思考的方向不对。一直的深到内存里面,而现在自己还不能够把学到的知识很好的融在一起,何况是运行。也限制了自己对程序的思考,平日代码又看的少。跟张志伟交流的时候,是觉得他侧重应用,让我感觉自己的思考是错误的,因这自己却一直往类型里面钻。然后也浪费了好多的时间。

    这个是我用自己的方法写的:整型二进制转为浮点二进制的程序

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int a[400][640];
    	double b;
    
    	FILE *fp1,*fp2;
    
    	if((fp1=fopen("sample","rb"))==NULL)
    	{
    		printf("Error!\n");
    	}
    	if((fp2=fopen("sample2","wb"))==NULL)
    	{
    		printf("Error!\n");
    	}
    	fread(a,1,400*640,fp1);    /*  fp1的内容读到数组a 里面 */
       
    	for(int i=0;i<400;i++)
    	{
    		for(int j=0;j<640;j++)
    		{
    			b=a[i][j];		/*	把a中的数据赋到b 里面 */
    			fwrite(&b,4,1,fp2);	   /*  把数组b把内容写到fp2里面*/
    		}
    	}	
    	fclose(fp1);
    	fclose(fp2);
    	system("pause");
    	return 0;
    }
    
    这个是用张的方法写的:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>		//用函数memset  
    
    typedef char BYTE;
    typedef float DWORD;
    int main()
    {
    	int i,j;
    	BYTE *data=(BYTE *)malloc(400*640);
    	DWORD *data1=(DWORD *)malloc(400*640*sizeof(DWORD));
    //	DWORD *data1=(DWORD *)malloc(400*640);   //这什么删了sizeof后面就不行。? 
    	
    	FILE *fp1,*fp2;
    	
    	if((fp1=fopen("sample","rb"))==NULL)
    	{
    		printf("error!\n");
    		return 0;
    	}
    	if((fp2=fopen("sample1","wb"))==NULL)
    	{
    		printf("Error!\n");
    		return 0;
    	}
    	memset(data,0,400*640);  // 清楚内存 
    	memset(data1,0,400*640*sizeof(DWORD));
      //  memset(data1,0,400*640);
    	fread(data,sizeof(BYTE),400*640,fp1);   /* 把fp1的文件读到data里面 */
    		itoa() 
    	for(i=0;i<400;i++)
    	{
    		for(j=0;j<640;j++)
    		{
    			data1[i*640+j]=data[i*640+j];
    		}
    	}
    		
    	fwrite(data1,sizeof(DWORD),400*640,fp2); /* 把data1的数据写到fp2里面 */ 
    	
    	fclose(fp1);
    	fclose(fp2);
    	free(data);
    	free(data1);
    	return 0;
    }
    
    

    最后

    在这里面很感谢两个网友:一个是随想,另一个就是小冬冬。随想是让自己问的实在是没有办法解释了,很无奈对自己说,好好看书吧,可是数据又确实没有。

    小冬冬,一直的很耐心的说,只是好像走偏了。这样一来,就让自己进入了一个死胡同里面。

    也不能否定自己的基础是何等的差。两个人都是被自己问到说真的不能帮自己了,呵呵!是不是自己太钻了。

  • 相关阅读:
    jquery大文件(视频)上传解决方案
    ajax大文件(视频)上传解决方案
    JavaScript大文件(视频)上传解决方案
    js大文件(视频)上传解决方案
    vue大文件(视频)上传解决方案
    前端大文件(视频)上传解决方案
    网页大文件(视频)上传解决方案
    Web大文件(视频)上传解决方案
    http大文件(视频)上传解决方案
    B/S大文件(视频)上传解决方案
  • 原文地址:https://www.cnblogs.com/zerocc/p/1888125.html
Copyright © 2011-2022 走看看