跨语言使用memcache问题 C++将一块内存放到了memcach中,然后我用java从memcach中拿到这个块内存,为什么得到的长度跟c++不一样呢?我首先将memcach中取出的东西强转成String,然后再.getBytes("GBK");但是拿到的东西不一样。求高人指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java内部采用unicode编码,c++是什么? 应该考虑是编码问题。内存中的字符串,本身就是编好码的二进制数。C++对字符串的数据结构,和Java对字符串的数据结构是不相同的。所以,编程来讲,是不应该进行强制类型转换的。两者数据结构不同,我记得C++的字符串的数据结构中没有字符串长度的变量,如果要得到字符串的长度,先要进行逐个字符的统计;字符串以'\0'作为结束符。Java的字符串数据结构,本身保存了字符串的长度变量,字符串不存在结束符。下面谈谈解决方案(当然,也可能解决不了楼主的问题)。楼主要先弄清楚,内存当中的字符串,到底是什么编码的,如果是C++的WinForm程序,一般是Unicode编码的,其他的程序,就要楼主想办法了。得到内存中字符串的数据以后,不要进行强制类型转换,可以采用String的一个构造器进行对象生成。比如:byte [] strBytes = ...;//内存中字符串的数据。String str = new String(strBytes,"Unicode");//一共两个参数,第一个就是二进制数据,第二个是编码方式。//这样就可以得到Java的字符串了。如果编码正确,下面的语句可以将字符串打印到控制台上。System.out.pringln(str); 如何设置Jtable的所有单元格为JTextArea,求例子、谢谢、、 大数据量导出标准的excel2007格式 急 JSTL和<%%>的效率比较 如何在java中恢复数据库 为什么后缀名为jsf网页弹出自动关闭?? 请问要把JAVA学上手大概要多少的时间呢? ****请教大虾.(执行顺序) 又一个小问题! 谁有JBuilder6 Enterprise 注册码? java能捕获显示器电源关闭事件么? 求助高手!!!急急急!!!读入一个文本文件,请输出该文件中的最短一行和最长一行(文件行数不定) 是不是ConcurrentHashMap可以替代所有的HashMap
内存中的字符串,本身就是编好码的二进制数。
C++对字符串的数据结构,和Java对字符串的数据结构是不相同的。
所以,编程来讲,是不应该进行强制类型转换的。
两者数据结构不同,我记得C++的字符串的数据结构中没有字符串长度的变量,
如果要得到字符串的长度,先要进行逐个字符的统计;字符串以'\0'作为结束符。
Java的字符串数据结构,本身保存了字符串的长度变量,字符串不存在结束符。下面谈谈解决方案(当然,也可能解决不了楼主的问题)。
楼主要先弄清楚,内存当中的字符串,到底是什么编码的,
如果是C++的WinForm程序,一般是Unicode编码的,其他的程序,就要楼主想办法了。
得到内存中字符串的数据以后,不要进行强制类型转换,可以采用String的一个构造器进行对象生成。
比如:
byte [] strBytes = ...;//内存中字符串的数据。
String str = new String(strBytes,"Unicode");//一共两个参数,第一个就是二进制数据,第二个是编码方式。
//这样就可以得到Java的字符串了。如果编码正确,下面的语句可以将字符串打印到控制台上。
System.out.pringln(str);