我想做的就是通过套接字发送一个整数,但似乎sendto socket命令只接受一个char。我正在努力将我的int更改为char以通过套接字发送它。 request_number是我想要更改为char的哪个是request_char。
我无权访问atoi / atof etc命令,所以在这里我尝试了sprintf。但是,当我运行它什么都不做,甚至不打印输出值。我的sprintf命令出了什么问题?或者在tcp套接字上发送int时有没有其他方法可以避免这种转换?
int request_number= 100;
char request_char[request_number];
sprintf(request_char, "%i", request_number);
send(tcp_new_socket , request_char , strlen(request_char) , 0);
另外,当我在套接字的另一端收到值时,如何将其重新转换为int?相同类型的sprintf命令??在此先感谢您的帮助。如果我需要详细说明,请告诉我。
答案 0 :(得分:0)
我想做的就是通过socket发送一个整数,但似乎sendto socket命令只接受一个char。
错误。它接受char *
。
我正在努力将我的int更改为char以通过套接字发送它。
你当然是。 int
不符合char
,您也不需要这样做。只需提供int
的地址并将其投放到char *
。
int request_number= 100;
char request_char[request_number];
sprintf(request_char, "%i", request_number);
send(tcp_new_socket , request_char , strlen(request_char) , 0);
此代码与您提供的说明不一致。此处没有任何内容可以将int
转换为char
。有代码将其转换为char[]
数组,以ASCII格式发送,但这并不是您所说的尝试。要以二进制形式发送int
:
int request_number = 100;
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0);
反过来接收者。但是,您应该以网络字节顺序发送int
:
int request_number = htons(100);
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0);
并在接收方使用ntohs()
将其重新置于主机顺序。
答案 1 :(得分:0)
您无需执行转换。套接字可以发送任何类型的数据。只需将int地址转换为char *,并为套接字指定指针和字节数。
答案 2 :(得分:-1)
发送到网络的任何内容都将以字节为单位...因此无符号字节是字符,因此您将发送API视为字符数组。
另一方面,您现在将根据协议[由您定义]接收字节数 当你收到你需要从字节
构造int类型希望这会有所帮助