You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ TCP/IP发送Networkbyte的转换方式是否正确咨询

代码存在的问题及修正方案

你代码里的问题非常明确,逐条梳理如下:

  • 数组越界问题(核心原因之一,导致你读到0值)
    你定义的buffer_converted是长度为1的数组:int buffer_converted[1] = { 0 };,C/C++数组下标从0开始,你后续赋值buffer_converted[1] = { _wtoi(buffer) };、转换时取input[1]都属于越界访问,读取到的是未知内存值,大概率就是0。
  • send函数参数传值错误(核心原因,直接导致发送无效)
    send的第二个参数要求是待发送数据的内存地址,你写的(char*)networkbyte、(char*)userInput_converted都是把变量本身的值强制转成了地址,相当于把你要发的数值当成了内存地址去读,自然读不到正确的发送内容。正确写法要加取地址符&:
    // 正确写法示例
    int sendResult = send(sock, (char*)&networkbyte, sizeof(networkbyte), 0);
    
  • 类型不匹配问题
    htons是专门用于将16位无符号整数从主机序转网络序的函数,你用它转32位int类型,还把结果存到uint64_t类型的userInput_converted里,类型完全混乱。如果你的业务只需要传16位数值,全程统一用uint16_t类型即可:
    uint16_t userInput_converted = htons((uint16_t)userInput);
    int sendResult = send(sock, (char*)&userInput_converted, sizeof(userInput_converted), 0);
    
  • 无效判断逻辑
    你写的if (sizeof(userInput) > 0 && a == false)完全没用,userInput是int类型参数,sizeof(int)在Windows平台固定为4,这个判断永远成立,没有实际校验作用。
  • 全局变量滥用问题
    你把networkbyte、buffer之类的变量定义成全局变量,不仅容易出冲突,也不利于代码维护,建议放到对应函数内部定义。

内容的提问来源于stack exchange,提问作者Hatux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:45:03