分类 C/C++ 下的文章

Protobuf全称Google Protocol Buffers,Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

一、什么是序列化?
序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易。不同的计算机语言中,数据结构,对象以及二进制串的表示方式并不相同,序列化为的是解决跨语言、跨平台的通讯问题。序列化后的数据当然不能是某种语言的特殊数据类型,常用的序列化协议有XML、JSON、Protobuf等。

  • 序列化: 将数据结构或对象转换成二进制串的过程。
  • 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

- 阅读剩余部分 -

CUDA与C++联合编程很常见,在Matlab工程中很少出现,当Matlab工程很庞大时,将Matlab库函数移动到C++工作量非常大,并且数值精度也无法保证。本文介绍在Matlab环境下CUDA编程。

首先确定有支持CUDA的Nvidia显卡,并且已经正确安装好驱动和SDK等,网上有许多CUDA安装与配置环境的教程。Matlab与CUDA混合编程,首先使用Matlab,C++混合编程,最后C++作为中间介质与CUDA进行调用。(本文测试环境:Win7x64,Matlab2012b,CUDAv6.5)

1、Matlab与C++混合编程

  • 在matlab的CommandWindow里输入mex –setup,选择C++编译器;
  • 测试example
    #include "mex.h"
    // nlhs:输出变量的个数
    // plhs:输出的mxArray矩阵的头指针
    // nrhs:输入变量个数
    // prhs:输入的mxArray矩阵的头指针
    void mexFunction(int nlhs,mxArray* plhs[],int nrhs,const mxArray* prhs[])
    { 
       mexPrintf("Hello, matlab with cuda!\n");
    }
  • 编译C++代码:mex helloMex.cpp,如果成功的话,将产生helloMex.mexw64(或helloMex.mexw32),在Matlab命令行输入helloMex则会输出结果。

mexFunction()是Matlab混合编程必须的函数,作为接口函数,进行参数的传递。

- 阅读剩余部分 -

1、Single Number:Given an array of integers, every element appears twice except for one. Find that single one.
异或,不仅能处理两次的情况,只要出现偶数次,都可以清零。

int singleNumber(int A[], int n) 
{
    // 数字范围不清楚,bitmap失败
    int x=0;
    for(size_t i=0;i<n;++i)
        x^=A[i];
    return x;
}

- 阅读剩余部分 -