求C语言内存数据读取代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C语言内存数据读取代码相关的知识,希望对你有一定的参考价值。
求对指定内存地址数据读取的代码。
#include<stdlib.h>#include<string.h>
int copymem(void*souceptr,void*destptr,int infolen)
return memcpy(destptr,souceptr,infolen);// 复制源去目标地址,位数为Infolen
参考技术A #include<stdio.h>
void main()
int a;
a=9;
printf("%d",&a); /*以十进制输出a地址数据读取的代码*/
参考技术B printf("%n", *a); // n 为数据类型,可换成相应滴占位符
a 为内存地址 参考技术C C++ code
int i= 3;
int main()
int j= 5;
编译上述代码,生成a.exe文件。
以下过程属于基本但并不精确的描述,具体实现细节和系统相关:
当你运行a.exe时,由于程序只能在内存中运行,所以操作系统首先要把a.exe加载到内存中,OS会创建一个进程,这个进程独享4G(32位)的虚拟内存空间,这个虚拟内存空间在逻辑上被分为许多“段”。OS会把a.exe文件中的代码部分放到进程内存空间的代码段部分(也就是把a.exe文件中的代码段映射到进程空间的代码段),把a.exe文件中的数据段映射到进程空间的数据段,加载过程完成后,还要进行栈指针设置等一系列准备活动,这些活动都完成之后,才会跳转到代码段中的main函数入口,执行main函数体。
来看一下上面例子中的代码,int i = 3; 这句话定义了一个全局变量i,初始化为3,也就是分配一段内存空间,设置这段内存空间的值为3。而main函数体内int j = 5;也分配了一段内存空间,设置这段内存空间的值为5。两者有什么区别呢?
首先,i放在静态存储区,j放在栈区。
其次,i在加载的过程中,在进入main函数之前就已经完成了分配空间和初始化;而j是在加载完成后,在main函数中完成分配空间和初始化的。
具体过程大致如下:
编译器看到int i = 3这一句后,会生成一个符号 i,生成与这个符号i相关的一些信息,比如:
i - 4byte(size) - 0x80344545(起始地址) - 3(初始化值)
这些信息都保存在a.exe中,然后加载a.exe的时候,加载器读取这些信息,设置相应的内存空间(0x80344545开始的4字节)的值为3。在这之后才进入main函数。
相对的,编译器看到int j = 5这一句后,会生成一些代码,这些代码会分配j的空间,并初始化其值。运行a.exe的时候,在加载工作完成后(此时int i = 3已完成),跳转到代码段中的main函数入口,开始执行main函数体,也就是执行int j = 5这一句,通过执行这些代码来分配空间和初始化。
简而言之,全局数据在加载阶段便已经完成了内存分配和初始化,通过映射.exe文件中的数据段来完成。而局部数据是在main运行期间完成内存分配和初始化,通过执行(v.)代码来完成。
另外,虚机团上产品团购,超级便宜
求高手点拨:一个Java的“IO读取txt文件中的数据”的问题.
高手,您好:
请问:
如果将一个存储在操作系统的txt文件中的一个整型常量进行“向内存中读取”的代码书写的话,用Java语言来做,落实到代码上,应该怎么写...?
希望高手能够落实到代码之上...
谢谢高手的相助!!
15分奉上!!
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
Java代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile
public static void readFileByBytes(String fileName)
File file = new File(fileName);
InputStream in = null;
try
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1)
System.out.write(tempbyte);
in.close();
catch (IOException e)
e.printStackTrace();
return;
try
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1)
System.out.write(tempbytes, 0, byteread);
catch (Exception e1)
e1.printStackTrace();
finally
if (in != null)
try
in.close();
catch (IOException e1)
public static void readFileByChars(String fileName)
File file = new File(fileName);
Reader reader = null;
try
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1)
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r')
System.out.print((char) tempchar);
reader.close();
catch (Exception e)
e.printStackTrace();
try
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1)
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r'))
System.out.print(tempchars);
else
for (int i = 0; i < charread; i++)
if (tempchars[i] == '\r')
continue;
else
System.out.print(tempchars[i]);
catch (Exception e1)
e1.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByLines(String fileName)
File file = new File(fileName);
BufferedReader reader = null;
try
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null)
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
reader.close();
catch (IOException e)
e.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByRandomAccess(String fileName)
RandomAccessFile randomFile = null;
try
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
long fileLength = randomFile.length();
// 读文件的起始位置
int beginIndex = (fileLength > 4) ? 4 : 0;
// 将读文件的开始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -1)
System.out.write(bytes, 0, byteread);
catch (IOException e)
e.printStackTrace();
finally
if (randomFile != null)
try
randomFile.close();
catch (IOException e1)
private static void showAvailableBytes(InputStream in)
try
System.out.println("当前字节输入流中的字节数为:" + in.available());
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile
public static void readFileByBytes(String fileName)
File file = new File(fileName);
InputStream in = null;
try
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1)
System.out.write(tempbyte);
in.close();
catch (IOException e)
e.printStackTrace();
return;
try
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1)
System.out.write(tempbytes, 0, byteread);
catch (Exception e1)
e1.printStackTrace();
finally
if (in != null)
try
in.close();
catch (IOException e1)
public static void readFileByChars(String fileName)
File file = new File(fileName);
Reader reader = null;
try
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1)
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r')
System.out.print((char) tempchar);
reader.close();
catch (Exception e)
e.printStackTrace();
try
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1)
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r'))
System.out.print(tempchars);
else
for (int i = 0; i < charread; i++)
if (tempchars[i] == '\r')
continue;
else
System.out.print(tempchars[i]);
catch (Exception e1)
e1.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByLines(String fileName)
File file = new File(fileName);
BufferedReader reader = null;
try
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null)
// 显示行号
System.out.println("line " + line + ": " +tempString);
line++;
reader.close();
catch (IOException e)
e.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByRandomAccess(String fileName)
RandomAccessFile randomFile = null;
try
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
long fileLength = randomFile.length();
// 读文件的起始位置
int beginIndex = (fileLength > 4) ? 4 : 0;
// 将读文件的开始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -1)
System.out.write(bytes, 0, byteread);
catch (IOException e)
e.printStackTrace();
finally
if (randomFile != null)
try
randomFile.close();
catch (IOException e1)
private static void showAvailableBytes(InputStream in)
try
System.out.println("当前字节输入流中的字节数为:" + in.available());
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
参考技术A java读文件主要分按字节读和按字符读,所以取决于文件的存储方式。按您的意思,txt文件中通常是字符,所以就按字符来读取,按字节可能会涉及到编码问题。我写上关键代码作为参考:
//读入文件
FileReader reader = new FileReader(new File("here is the file path.")) ;
StringBuffer sb = new StringBuffer() ;
int r ;
//读取字符,并存入缓存中
while (r = reader.read() != -1)
sb.append(char(r)) ;
reader.close() ;
//把所有字符组成的字符串转化成数字
int finInt = Integer.parseInt(sb.toString()) ;
是这个意思吗?可以商量
以上是关于求C语言内存数据读取代码的主要内容,如果未能解决你的问题,请参考以下文章