C++将一块内存放到了memcach中,然后我用java从memcach中拿到这个块内存,为什么得到的长度跟c++不一样呢?我首先将memcach中取出的东西强转成String,然后再.getBytes("GBK");但是拿到的东西不一样。
求高人指点

解决方案 »

  1.   

    java内部采用unicode编码,c++是什么?
      

  2.   

    应该考虑是编码问题。
    内存中的字符串,本身就是编好码的二进制数。
    C++对字符串的数据结构,和Java对字符串的数据结构是不相同的。
    所以,编程来讲,是不应该进行强制类型转换的。
    两者数据结构不同,我记得C++的字符串的数据结构中没有字符串长度的变量,
    如果要得到字符串的长度,先要进行逐个字符的统计;字符串以'\0'作为结束符。
    Java的字符串数据结构,本身保存了字符串的长度变量,字符串不存在结束符。下面谈谈解决方案(当然,也可能解决不了楼主的问题)。
    楼主要先弄清楚,内存当中的字符串,到底是什么编码的,
    如果是C++的WinForm程序,一般是Unicode编码的,其他的程序,就要楼主想办法了。
    得到内存中字符串的数据以后,不要进行强制类型转换,可以采用String的一个构造器进行对象生成。
    比如:
    byte [] strBytes = ...;//内存中字符串的数据。
    String str = new String(strBytes,"Unicode");//一共两个参数,第一个就是二进制数据,第二个是编码方式。
    //这样就可以得到Java的字符串了。如果编码正确,下面的语句可以将字符串打印到控制台上。
    System.out.pringln(str);