分这么几步 *** 作:
把读出的一行数据,根据分号(;),解析成数组;
然后循环这个数组,根据冒号(:),解析成数组;
把2的数据赋给一个map;
代码示意:
String str = "你读取的一行文本";Map map = new HashMap(); //新建map对象
String[] strArray = strsplit(";");
for(String s:strArray){
String[] sArray = ssplit(":");
mapput(sArray[0], sArray[1]);
}
示例代码:
#include <iostream>
using namespace std;
void crash()
{
__asm
{
int 3;//到这里就中断(模拟程序崩溃)
}
}
int main()
{
cout<<"hello"<<"\n";
crash();
return 0;
}
在vc60里敲入上面代码,project->settings->c/c++ 在project options里加上/Zd表示编译的时候生成行信息,然后在link选项卡里勾选Generate mapfile,在project options加上/mapinfo:lines。好了,rebuild all就可以在debug目录下生成一个后缀名为map的文件,可以用记事本打开它。
运行程序,d出有“调试 发送错误报告 不发送”三个按钮的对话框,查看错误报告技术信息,在开始的几行里有“code flags record address“记住address后的地址,我的是0x00401156。根据它就能找出崩溃时的函数地址。可以查看map文件的 “Rva+Base”(偏移+基地址)列,其中第一个大于address的前一个call对应函数就是崩溃的函数。
用法应该没错,如果没有读到和你想象中一致的数据,可能有以下几种原因:
1 你要读取的整数是8位,16位,还是32位,是无符号还是有符号?需要使用对应的类型,8位是char,16位是short,32位是int。如果使用了int,实际上是一次读四个字节,当作32位整数处理。如果你是要读八位的字节(无符号类型)的话,那应该用unsigned char,然后转化成int:
char base = (char)MapViewOfFile()
int first = (int)base[0];
cout<<first<<endl;
2 小端和大端格式。Windows下是小端格式,比如一个整数0x11223344,存在内存中的顺序是:
44 33 22 11
即低位字节在低地址,高位字节在高地址。
另一些系统使用大端格式,存在内存中的顺序和书写顺序一致是11 22 33 44。从这些系统中迁移数据需要颠倒字节顺序。
3 对齐边界。如果指定的偏移没对齐到16位或32位的边界的话,读出的16位或32位数会有问题。读8位没有这个问题。
比较简单的方法是引入json包,将map数据转换成json格式数据并存放到文件中。具体代码不在此写了。
其他的方法也可以转换成xml格式的数据,保存到内存中,不如json方法简单。另外,如果map中包含数据格式确定,可以自己写代码转换成自己定义的格式保存到文件中,该方法可修改性比较差,费时耗力。
安卓读取文件到hashmap可以这样做:
1、定义一个类继承androidTestCase。
2、在清单文件配置use-library和instrumentation,一个在application外面,一个在里面。
3、可以自己手动创建安卓测试工程,可以自动生成上面内容。
以上就是关于java读取txt文件,文件中的内容如下所示。map结构,读出来的一行String怎么转换为Map。请问我该怎么做全部的内容,包括:java读取txt文件,文件中的内容如下所示。map结构,读出来的一行String怎么转换为Map。请问我该怎么做、如何生成.MAP文件、C++中,使用MapViewOfFile对文件进行映像,如何按整数读取映像文件的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)