ofstream sw(fileName, ios::binary);
if (!sw.is_open()) {
cout << "fail to open " << fileName << endl;
return -1;
sw.write(name.c_str(), 255);
sw.write(reinterpret_cast
(&ni), sizeof(ni));
sw.write(reinterpret_cast(&nj), sizeof(nj));
for (int j = 0; j < nj; j++) {
for (int i = 0; i < ni; i++) {
sw.write(reinterpret_cast(&grid[j][i]), sizeof(grid[j][i]));
sw.close();
return 0;
template
int Model2D::savetxt(string fileName)
ofstream sw(fileName);
if (!sw.is_open()) {
cout << "fail to open " << fileName << endl;
return -1;
sw << "ni=" << ni << " nj=" << nj << endl;
for (int j = 0; j < nj; j++) {
for (int i = 0; i < ni; i++) {
sw << grid[j][i] <<" ";
sw << endl;
sw.close();
return 0;
template
int Model2D::readbin(string fileName)
ifstream fin(fileName, ios::binary);
if (!fin.is_open()) {
cout << "fail to open " << fileName << endl;
return -1;
char s[255];
fin.read(s, 255);
this->name = s;
cout << "name=" << this->name << endl;
int n;
fin.read(reinterpret_cast(&n), sizeof(n));
ni = n;
fin.read(reinterpret_cast(&n), sizeof(n));
nj = n;
cout << "ni=" << ni << " nj =" << nj << endl;
T value;
this->grid = vector>(nj, vector(ni, value));
for (int j = 0; j < nj; j++) {
for (int i = 0; i < ni; i++) {
fin.read(reinterpret_cast(&value), sizeof(value));
grid[j][i] = value;
//cout << value << " ";
//cout << endl;
fin.close();
return 0;
2、测试容器的二进制读写情况
#include <random>
#include <algorithm>
#include "Model2D.h"
using namespace std;
int main()
std::cout << "Hello World!\n";
int ni = 10;
int nj = 5;
//Model2D<float> model2d = Model2D<float>(nj, ni, 1.0, "testName");
auto model2d = Model2D<double>(nj, ni, 1, "testName");
default_random_engine engin(0);
uniform_real_distribution<double> urand(0,1);
//uniform_int_distribution<int> urand(0, 10);
for (int j = 0; j < nj; j++) {
for (int i = 0; i < ni; i++) {
model2d.grid[j][i] = urand(engin);
model2d.savebin("model2d.dat");
model2d.savetxt("model2d.txt");
Model2D<double> model2dr;
model2dr.readbin("model2d.dat");
model2dr.savetxt("model2dr.txt");
return 0;
3、测试结果
ni=10 nj=5
0.592845 0.844266 0.857946 0.847252 0.623564 0.384382 0.297535 0.056713 0.272656 0.477665
0.812169 0.479977 0.392785 0.836079 0.337396 0.648172 0.368242 0.957155 0.140351 0.870087
0.473608 0.800911 0.520477 0.67888 0.720633 0.58202 0.537373 0.758616 0.105908 0.4736
0.186332 0.736918 0.21655 0.135218 0.324141 0.149675 0.222321 0.386489 0.902598 0.44995
0.613063 0.902349 0.0992804 0.969809 0.65314 0.17091 0.358152 0.750686 0.607831 0.325047
ni=10 nj=5
0.592845 0.844266 0.857946 0.847252 0.623564 0.384382 0.297535 0.056713 0.272656 0.477665
0.812169 0.479977 0.392785 0.836079 0.337396 0.648172 0.368242 0.957155 0.140351 0.870087
0.473608 0.800911 0.520477 0.67888 0.720633 0.58202 0.537373 0.758616 0.105908 0.4736
0.186332 0.736918 0.21655 0.135218 0.324141 0.149675 0.222321 0.386489 0.902598 0.44995
0.613063 0.902349 0.0992804 0.969809 0.65314 0.17091 0.358152 0.750686 0.607831 0.325047
scipy.misc.imsave('outfile.jpg', image_array)
上面的scipy版本会标准化所有图像,以便min(数据)变成黑色,max(数据)变成白色。如果数据应该是精确的灰度级或准确的RGB通道,则解决方案为:
import scipy.misc
misc.to...
要求:1.分别从两个文件Matrix_A.txt以及Matrix_B.txt中读取两个矩阵。
2.计算两个矩阵的相乘结果,并将乘积矩阵输出至Matrix_mul.txt中。
3.整个程序要求使用C++语言中的类操作实现。
4.包含安全性检查:文件找不到、文件为空、相乘的两矩阵维数不...
读出指定文本文件中各矩阵,计算多矩阵相乘后结果,并将结果写入另一文本文件中。
输入文件格式:1.每一个矩阵的列与列之间有一个空格,行与行之间有一个换行符。
2.矩阵与矩阵之间有一空行,文件末尾为最后一个矩阵的下一行。
一开始做这个练习的时候为result矩阵分配了所有输入矩阵中行列数最大值对应的内存空间。后来经老师提示发现需要为re
1.Kapok的特点
简单,易用,header-only,只需要引用Kapok.hpp即可;高效,初步测试性和messagepack相当。
它是纯c++11实现,因此需要支持C++11的编译器。
2.主要功能
对对象进行自动化的序列化和反序列化,用起来非常简单,先来看个序列化/反序列化一个tuple的例子吧。
//序列化
Serializer sr;
auto tp = std::make_tuple(10, 12, string("test"));
sr.Serialize(tp, "tuple");
//反序列
之前写了个opencv读取大矩阵的问题,这次遇到一个更大的矩阵,不想用opencv格式化读文件,故直接采用c++读取。
首先c++读取文件的几种方式可以参考“探寻C++最快的读取文件的方案”(1)一文,而其中提到的内存映射方法可以参考“windows笔记-内存映射文件”(2)一文。
输入对象是一个50×71028的浮点数矩阵,保存为.txt文件,共55mb,单纯采用fstream格式化读取需要
using System;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
public class PurchaseCheck
public const string pref
c++ 序列化和反序列化什么是序列化?为什么要序列化?优点在哪里?C++对象序列化的四种方法Google Protocol Buffers(protobuf)Boost.SerializationMFC SerializationNet Framework简单总结举例说明
什么是序列化?
序列化指的是将一个内存对象转化成一串字节数据(存储在一个字节数组中),可用于保存到本地文件或网络传输。反序列...
//bool理论上使用一个bit就可以表示,但是实际还是使用1个字节,因为这是内存操作的最小单位
//这两个值可以是任意值,只要不相同即可,只是用于校验
const long true_pattern = 0xF00DF00D;