C 将大小转换为字符串

C 将大小转换为字符串,c,linux,posix,stat,size-t,C,Linux,Posix,Stat,Size T,我正在尝试编写一个TCP服务器,客户端可以使用它浏览服务器的目录。除此之外,如果是常规文件,我还想发送目录的大小。文件大小保存在“stat”结构下的size\t变量中。 我在这里这样做: char *fullName /* The path to the file *. /** * Some code here */ struct stat buffer; lstat(fullName, &buffer) 现在buffer.st_size包含了文件的大小。现在我想将()写入

我正在尝试编写一个TCP服务器,客户端可以使用它浏览服务器的目录。除此之外,如果是常规文件,我还想发送目录的大小。文件大小保存在“stat”结构下的size\t变量中。 我在这里这样做:

char *fullName  /* The path to the file *.
/** 
  * Some code here
  */
struct stat buffer;
lstat(fullName, &buffer)
现在buffer.st_size包含了文件的大小。现在我想将()写入侦听套接字,但显然我必须以某种方式将其转换为字符串。我知道这可以通过按位右移(>>)操作符以某种方式完成,但这对我来说太痛苦了。你能帮我一下吗(即使没有其他方法可以使用位运算符)

顺便说一句,这不是学校或smth


PS:我正在Linux上运行此功能。

您可以使用函数的成员将“某物”转换为“字符串”


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

所以你可以这样做:

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

这可能太快了,您可能需要考虑端点等。

您知道
大小\u t
是无符号的,但长度未知。在C99中,我们使用了
z
修饰符,使完整的说明符
%zu

size_t s = 123456789;
char str[256];

snprintf(str, sizeof str, "%zu", s);

对于那些没有头脑的人……你知道你的东西!;-)我在使用sprintf()和snprintf()的内存方面有过不好的经验,但这并不是我想要的,这是我的错,我没有很好地解释这一点。我实际上想把它的大小转换成它的比例。e、 g 123456789将写为“117,73 MB”。现在我知道我可以利用数字0-9对于整数和字符串具有相同的ascii码这一事实,但我不知道如何实际实现它。我试过几件事,但每次都失败了。已经感谢您的输入了。@user3119598:“我在使用sprintf()和snprintf()的内存方面有不好的经验……”这只是培训的问题。这些函数是保存的,并且可以直接使用。它们比使用它们的危险性要小得多,例如它们与
scanf*()
-家族的同类。培训使用
sprintf()
-函数,因为它们是必不可少的。我曾经使用过它们,但在大型项目中通常会出现内存泄漏。无论如何,它在这一个工作,所以谢谢你的建议:)。现在我想将大小从字节转换为kb、mb等。它必须是一个字符串,因为它将是HTML页面的一部分。好的,“但显然我必须以某种方式将其转换为字符串”误导了我;)
write(socket, &(buffer.st_size), sizeof(size_t));
size_t s = 123456789;
char str[256];

snprintf(str, sizeof str, "%zu", s);