java中的string的getbytes方法,在c++中如何实现?

ylongwu 2014-07-23 05:38:14

java中的一个string, 使用getBytes() 之后,再通过socket发送给服务器, 如下:

byte[] btInput = stringData.getBytes();

现在在C++中同样有个字符串,请问该如何转换之后,再通过socket发送出去?
...全文
601 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-07-24
  • 打赏
  • 举报
回复
C++中 socket发送数据是以二进制发送, 跟字符集无关的. 可以把任意类型数据 , 转换成char *buf 然后发送. (API参数是char *)
baichi4141 2014-07-24
  • 打赏
  • 举报
回复
引用 9 楼 ylongwu 的回复:
英文字母变成一个字节,汉字变成三个字节,一个字节无所谓大端小端,三个字节则是大端优先排列
我猜java把字符串按UTF8重新编码了
modyaj 2014-07-24
  • 打赏
  • 举报
回复
不知道你需要的是不是这个

// 	将字符串转化为宽字符
	nLength = MultiByteToWideChar(CP_ACP, 0, pMsgBody, -1, NULL, 0);   
	MultiByteToWideChar(CP_ACP, 0, pMsgBody, -1, szMulti, nLength);   
我用过C#相对应于

byte[] unicodemessage = Encoding.Unicode.GetBytes(strmessage);//消息内容  
ylongwu 2014-07-24
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
MD5Encode干了啥?md5->hex? [quote=引用 6 楼 ylongwu 的回复:] [quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 ylongwu 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 不用转换,原样发送?
好像字符集是不一样的。。。。。。。[/quote] std::string不管字符集。 [/quote] 多谢了! 这段java代码和c++代码得到的结果不一样 java:


        byte[] btInput = Mystring.getBytes();
        MessageDigest mdInst = MessageDigest.getInstance("MD5");
        mdInst.update(btInput);
        byte[] md = mdInst.digest();
        String shadowPassword = byte2hex(md);
C++代码:

	  string  shadowPassword = MD5Encode(Mystring.c_str()); 
这两段代码的作用都是md5加密后转为hex字符串,输入Mystring都是一样的,但是结果shadowPassword 是不一样的。 C++这段代码加密跟hex转换肯定没有问题,因为我用另一个单独的md5加密和hex转成程序测试过,得到的结果是一样的。 java使用自带函数,肯定也没问题,我怀疑是某部分编码方式不一样造成的。[/quote][/quote]
引用 8 楼 xiaohuh421 的回复:
C++中 socket发送数据是以二进制发送, 跟字符集无关的. 可以把任意类型数据 , 转换成char *buf 然后发送. (API参数是char *)
其实关键问题是java中的那个 getBytes()函数, java中的string使用的unicode编码,无论是英文字母还是汉字,都是用两个字节来表示,而且编码形式是大端在前。getBytes()之后,英文字母变成一个字节,汉字变成三个字节,一个字节无所谓大端小端,三个字节则是大端优先排列。所以getBytes()之后的二进制序列跟C++中的string::c_str()得到的结果根本不一样! 这是我暂时的理解,不知道对不对,
mujiok2003 2014-07-23
  • 打赏
  • 举报
回复
MD5Encode干了啥?md5->hex?
引用 6 楼 ylongwu 的回复:
[quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 ylongwu 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 不用转换,原样发送?
好像字符集是不一样的。。。。。。。[/quote] std::string不管字符集。 [/quote] 多谢了! 这段java代码和c++代码得到的结果不一样 java:


        byte[] btInput = Mystring.getBytes();
        MessageDigest mdInst = MessageDigest.getInstance("MD5");
        mdInst.update(btInput);
        byte[] md = mdInst.digest();
        String shadowPassword = byte2hex(md);
C++代码:

	  string  shadowPassword = MD5Encode(Mystring.c_str()); 
这两段代码的作用都是md5加密后转为hex字符串,输入Mystring都是一样的,但是结果shadowPassword 是不一样的。 C++这段代码加密跟hex转换肯定没有问题,因为我用另一个单独的md5加密和hex转成程序测试过,得到的结果是一样的。 java使用自带函数,肯定也没问题,我怀疑是某部分编码方式不一样造成的。[/quote]
ylongwu 2014-07-23
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
[quote=引用 4 楼 ylongwu 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 不用转换,原样发送?
好像字符集是不一样的。。。。。。。[/quote] std::string不管字符集。 [/quote] 多谢了! 这段java代码和c++代码得到的结果不一样 java:


        byte[] btInput = Mystring.getBytes();
        MessageDigest mdInst = MessageDigest.getInstance("MD5");
        mdInst.update(btInput);
        byte[] md = mdInst.digest();
        String shadowPassword = byte2hex(md);
C++代码:

	  string  shadowPassword = MD5Encode(Mystring.c_str()); 
这两段代码的作用都是md5加密后转为hex字符串,输入Mystring都是一样的,但是结果shadowPassword 是不一样的。 C++这段代码加密跟hex转换肯定没有问题,因为我用另一个单独的md5加密和hex转成程序测试过,得到的结果是一样的。 java使用自带函数,肯定也没问题,我怀疑是某部分编码方式不一样造成的。
mujiok2003 2014-07-23
  • 打赏
  • 举报
回复
引用 4 楼 ylongwu 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 不用转换,原样发送?
好像字符集是不一样的。。。。。。。[/quote] std::string不管字符集。
ylongwu 2014-07-23
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不用转换,原样发送?
好像字符集是不一样的。。。。。。。
ylongwu 2014-07-23
  • 打赏
  • 举报
回复
引用 2 楼 zhousitiaoda 的回复:
那要看你C++里这个字符串是什么存储的,是char*还是stl里的string还是MFC里的CString或者是你自己写的字符串类。如果是stl里的,可以这样 string str = "dgfdgdf"; const char* pSend = str.c_str();
好像字符集是不一样的。。。。。。。
zhousitiaoda 2014-07-23
  • 打赏
  • 举报
回复
那要看你C++里这个字符串是什么存储的,是char*还是stl里的string还是MFC里的CString或者是你自己写的字符串类。如果是stl里的,可以这样 string str = "dgfdgdf"; const char* pSend = str.c_str();
赵4老师 2014-07-23
  • 打赏
  • 举报
回复
不用转换,原样发送?

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧