存成json的字符串 读的时候自己解析吧

解决方案 »

  1.   

    这是在c++项目中的需求,json没用过
      

  2.   

    没法直接写的.
    需要程序里头,把这个结构体,转到unsigned char[4 + 32 + sizeof(long)], 之后bind到那个blob里头.
      

  3.   

    To iihero,
        多谢回复!“转到unsigned char[4 + 32 + sizeof(long)], "这个是定长的数组,确定是这样吗?
        另外,我刚才想到一个方法,把一个c++的struct转成字符串,帮我看看是否可行?
        struct不能作为string存储的原因是因为里面有0表示为字符串的结束符,如果通过某种转义将这些0换成其他的字符,是不是就能存储了?
      

  4.   

    可以转换成字符串,比如sprintf("%i;%s;%i",val,name,data)
      

  5.   

    我是想确认,一个BYTE buffer[100]的数组,如果将其中的0转换成其他数值,是不是就可以当成字符串来用了?
      

  6.   


    你想弄成字符串格式,那也非常简单,
    char res[256];
    sprintf(res, "%d;%s\n%ld", a.val, a.name, a.data);
    取回来的时候,
    直接
    scanf就行了。
    关键是格式串中的;以及\n能把它们区分开来。
    这里假定a.name不会出现换行符\n(显然不会:))
      

  7.   

    你是想用二进制直接memcpy的方式,那就直接将0x16进制的转换成可打印的字符形式, 但是好像不如格式化输入输出来得简单。
      

  8.   


    C++有明确的对齐方式,
    unsigned char[4 + 32 + sizeof(long)]
    应该是定长的。
    取决于是32位,还是64位,32位里头, sizeof(long)为4字节,否则为8字节。
      

  9.   

    To iihero,
          你是想用二进制直接memcpy的方式,那就直接将0x16进制的转换成可打印的字符形式, 但是好像不如格式化输入输出来得简单。这个问题是:如何在mysql中存储二进制数据?而且需要是通用的的方法,所以用格式化输入只是针对上面举的例子,可能会比较简单,但并不通用(除非为每一个二进制数据存储写格式化接口?这不现实)。把二进制的数据通过0x16禁止的转换是可行的方法,不过存储空间将会是原来的2倍,我刚才试验了一下,对BYTE来说从0-255中,只有0和39(符号为:‘)是需要转义的,其他的都可以不用变,因此专门针对这2个字符进行处理,这样所需要的存储空间,只比原来的数据多出25%左右。
      

  10.   

    你是想用二进制直接memcpy的方式,那就直接将0x16进制的转换成可打印的字符形式, 但是好像不如格式化输入输出来得简单。这个问题是:如何在mysql中存储二进制数据?而且需要是通用的的方法,所以用格式化输入只是针对上面举的例子,可能会比较简单,但并不通用(除非为每一个二进制数据存储写格式化接口?这不现实)。把二进制的数据通过0x16禁止的转换是可行的方法,不过存储空间将会是原来的2倍,我刚才试验了一下,对BYTE来说从0-255中,只有0和39(符号为:‘)是需要转义的,其他的都可以不用变,因此专门针对这2个字符进行处理,这样所需要的存储空间,只比原来的数据多出25%左右。如果是通用,我前边已经提到,
    memcpy到一个buffer, 然后调用mysql的api, 直接bind,这个不难。
    根本不需要你转换。
    读出的时候,直接bind到buffer, 然后强制转换。
    这是通用的做法。
      

  11.   

    哪个api可以直接bind? 是mysql_real_escape_string吗?