将size_t转换为字符串

时间:2013-12-19 15:07:25

标签: 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包含文件的大小。现在我想写()它到监听套接字,但显然我必须以某种方式将其转换为字符串。我知道这可以通过按位右移(>>)运算符以某种方式完成,但对我来说似乎太痛苦了。你能帮我解决这个问题吗(即使其他那些按位运算符也没办法)?

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

PS:我在Linux上运行它。

3 个答案:

答案 0 :(得分:9)

您可以使用sprintf()-family函数的成员将“某些内容”转换为“字符串”。

#define _POSIX_C_SOURCE 200112L

#include <stdio.h>
#include <unistd.h>   
#include <string.h>

int main(void)
{
  size_t s = 123456789;
  char str[256] = ""; /* In fact not necessary as snprintf() adds the 
                         0-terminator. */

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

  fputs(stdout, "The size is '");
  fflush(stdout);

  write(fileno(stdout), str, strlen(str));

  fputs(stdout, "'.\n");

  return 0;
}

打印出来:

The size is '123456789'.

答案 1 :(得分:3)

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

size_t s = 123456789;
char str[256];

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

答案 2 :(得分:1)

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

所以你可以这样做:

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

这可能要快,你可能要考虑到字节序等。