求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语言内存数据读取代码的主要内容,如果未能解决你的问题,请参考以下文章

求一个Cstring类数组文件读取代码

C语言对结构体文件的读取

C语言 读取文件到内存

用c语言读取csv文件中的一列数据并求这些数据的平均值

在C语言中如果已经知道了一个数据的内存地址,怎样直接从内存中读取出该数据?

求JS如何读取PHP里的多维数组?