将size_t转换为string

我试图写一个客户端可以用来浏览服务器的目录的TCP服务器。 除此之外,我想发送目录的大小,如果这是一个普通的文件。 文件的大小被保存在一个“stat”结构下的size_tvariables中。 我在这里这样做:

char *fullName /* The path to the file *. /** * Some code here */ struct stat buffer; lstat(fullName, &buffer) 

所以现在buffer.st_size包含文件的大小。 现在我想写()它的监听套接字,但显然我必须将其转换为string不知何故。 我知道这可以用按位右移(>>)操作符以某种方式完成,但对我来说似乎太痛苦了。 你能帮我一下吗(即使没有其他那些按位运算符)?

顺便说一下,这不是学校或水手…

PS:我在Linux上运行这个。

你可以使用sprintf()函数的成员将“something”转换为“string”。

 #define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> #include <string.h> int main(void) { size_t s = 123456789; char str[256] = ""; snprintf(str, sizeof(str), "%zu", s); fprintf(stdout, "The size is '"); fflush(stdout); write(fileno(stdout), str, strlen(str)); fprintf(stdout, "'.\n"); return 0; } 

打印出来:

 The size is '123456789'. 

你知道size_t是无符号的,但是长度是未知的。 在C99中,我们有z修饰符,使得​​完整的说明符%zu

 size_t s = 123456789; char str[256]; snprintf(str, sizeof str, "%zu", s); 

char *不一定是一个字符串,你可以发送你想要的。 只管理其他计算机使用相同的协议。

所以你可以这样做:

 write(socket, &(buffer.st_size), sizeof(size_t)); 

这可能是斋戒,你可能要考虑到排序等。