gpt4 book ai didi

将十六进制从套接字转换为十进制

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:27 24 4
gpt4 key购买 nike

在服务器中,我首先获取图像数据的长度,然后通过 TCP 套接字获取图像数据。如何将长度(十六进制)转换为十进制,以便我知道应该读取多少图像数据? (例如 0x00 0x00 0x17 0xF0 到 6128 字节)

char len[4];
char buf[1024];
int lengthbytes = 0;
int databytes = 0;
int readbytes = 0;

// receive the length of image data
lengthbytes = recv(clientSocket, len, sizeof(len), 0);

// how to convert binary hex data to length in bytes

// get all image data
while ( readbytes < ??? ) {

databytes = recv(clientSocket, buf, sizeof(buf), 0);

FILE *pFile;
pFile = fopen("image.jpg","wb");
fwrite(buf, 1, sizeof(buf), pFile);

readbytes += databytes;
}

fclose(pFile);

已编辑:这是有效的。

typedef unsigned __int32 uint32_t; // Required as I'm using Visual Studio 2005
uint32_t len;
char buf[1024];
int lengthbytes = 0;
int databytes = 0;
int readbytes = 0;

FILE *pFile;
pFile = fopen("new.jpg","wb");

// receive the length of image data
lengthbytes = recv(clientSocket, (char *)&len, sizeof(len), 0);

// using networkd endians to convert hexadecimal data to length in bytes
len = ntohl(len);

// get all image data
while ( readbytes < len ) {
databytes = recv(clientSocket, buf, sizeof(buf), 0);
fwrite(buf, 1, sizeof(buf), pFile);
readbytes += databytes;
}

fclose(pFile);

最佳答案

如果您以零结束数字,使其成为一个字符串(假设您将数字作为字符发送),您可以使用 strtoul .


如果您将其作为二进制 32 位数字发送,则您已经在需要时拥有了它。您应该为它使用不同的数据类型:uint32_t:

uint32_t len;

/* Read the value */
recv(clientSocket, (char *) &len, sizeof(len));

/* Convert from network byte-order */
len = ntohl(len);

在设计二进制协议(protocol)时,您应该始终使用标准的固定大小数据类型,如上例中的 uint32_t,并始终以网络字节顺序发送所有非文本数据。这将使协议(protocol)在平台之间更具可移植性。但是,您不必转换实际的图像数据,因为它应该已经是独立于平台的格式,或者只是没有任何字节顺序问题的纯数据字节。

关于将十六进制从套接字转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15222848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com