【发布时间】:2014-10-11 21:10:25
【问题描述】:
我在使用 TCP 套接字发送十六进制值时遇到了困难。具体来说,我想通过套接字发送一个十六进制值(例如 0x123456),以便 TCP 数据发送,而不是 ASCII 表示,是我想要的值。我目前只能将我想要的值作为 ASCII 字符串发送,感谢任何通过套接字发送十六进制值的帮助。
下面是我写的代码:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>
#include <string>
#include <unistd.h>
using namespace std;
int main(int argc, char**argv) {
int sockfd, n;
struct sockaddr_in servaddr;
char sendline[1000];
char recvline[1000];
std::string serveraddr = "127.0.0.1";
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(serveraddr.c_str());
servaddr.sin_port = htons(1234);
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
int number = 0x123456;
int sendsize;
sendsize = snprintf(sendline, sizeof(sendline), "%x", number);
send(sockfd, sendline, sendsize * sizeof(char), 0);
}
【问题讨论】:
-
想要使用
uint8_t甚至uint32_t使用网络字节顺序? -
@jprince14 十六进制值始终是(ascii)字符串中数字的表示形式。因此,您不想发送十六进制值,而是发送值本身。
-
下面的表达式是真还是假:
16==0x10?
标签: c++ c sockets tcp network-programming