VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 74|回复: 3

[已解决]win32 c++ socket怎么发送utf8的中文

[复制链接]
21_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-22 17:50:07 | 显示全部楼层 |阅读模式
本帖最后由 luoxuan 于 2020-3-22 17:54 编辑

我是新手不知道怎么转换,vs设置的是unicode的

#pragma pack (push, 1)

struct send_sys_info {
        BYTE mProcType;
        short int mProc;
        int total;
        int type;
        int _loc4_;
        BYTE pos;
        BYTE time;
        int color;
        short int len;
        wchar_t content[1024];
};
#pragma pack(pop)

string WStringToUTF8(const wchar_t* lpwcszWString)
{
        char* pElementText;
        int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, -1, NULL, 0, NULL, NULL);
        pElementText = new char[iTextLen + 1];
        memset((void*)pElementText, 0, (iTextLen + 1) * sizeof(char));
        ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, -1, pElementText, iTextLen, NULL, NULL);
        string strReturn(pElementText);
        delete[] pElementText;
        return strReturn;
}




wstring str = L"欢";

                string s = WStringToUTF8(str.c_str());
               
                char sys_data[2048] = {0};

                send_sys_info* sys_info = (send_sys_info*) sys_data;
                sys_info->mProcType = 3;
                sys_info->mProc = 0x0F;
                sys_info->total = s.length() + 16;
                sys_info->type = 1;
                sys_info->_loc4_ = 152961;
                sys_info->pos = 0;
                sys_info->time = 1;
                sys_info->color = 0;
                sys_info->len = s.length();
                sys_info->content = 这个content该怎么定义,我socket要发送utf8的中文,占用3个字节的,求帮助

                int packsize = sys_info->total + 7;

                SendData(pSoContext, sys_data, packsize);

还有我socket要发送结构体是不是这么整啊
发送的数据包 03 0F 00 13 00 00 00 01 00 00 00 81 55 02 00 00 01 00 00 00 00 03 00 00 00 00
最后3个00应该是wstring str = L"欢";  这个欢字怎么发送,问题就在这里
最佳答案
01_avatar_small
2020-3-22 22:01:08
luoxuan 发表于 2020-3-22 19:56
那我这个问题要咋整,utf8的中文怎么发

调用完 WStringToUTF8 之后,将返回来的 utf8 的字符串赋值到 content 中,但是要保证 content 的空间够用哈。之后直接发送 sys_info 这个结构体就可以了




上一篇:t_main是unicode编码的主函数是什么意思?
下一篇:无法对win10系统的计算器的窗口进行像课程中的操作,现在是2020年了,用win7的人少
51_avatar_middle
最佳答案
42 
online_admins 发表于 2020-3-22 18:52:31 | 显示全部楼层
socket 发送的只是二进制数据,他不管你发送的内容是什么
所以要发送什么东西就把地址传递给 send 函数就行了
21_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-3-22 19:56:35 来自手机 | 显示全部楼层
Syc 发表于 2020-3-22 18:52
socket 发送的只是二进制数据,他不管你发送的内容是什么
所以要发送什么东西就把地址传递给 send 函数就 ...

那我这个问题要咋整,utf8的中文怎么发
01_avatar_middle
最佳答案
32 
online_admins 发表于 2020-3-22 22:01:08 | 显示全部楼层    本楼为最佳答案   
bestAnswer
luoxuan 发表于 2020-3-22 19:56
那我这个问题要咋整,utf8的中文怎么发

调用完 WStringToUTF8 之后,将返回来的 utf8 的字符串赋值到 content 中,但是要保证 content 的空间够用哈。之后直接发送 sys_info 这个结构体就可以了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-4-1 20:12

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表