C ++ API以不同的方式将Varint写入文件而不是套接字

时间:2011-06-05 10:23:28

标签: c# c++ protocol-buffers

我想问一下,因为我觉得很奇怪:编写varint的方式取决于目标。

我的简单代码可以写入文件或套接字。当我写入文件时,hexdump显示

  <00> 0000000 02ac
  0000002

当我写入套接字时,逐字节读取的C#客户端显示

  

ac 02

对此负责的代码是:

C ++ app

  if(connect(fd, (sockaddr*)&addr, sizeof(addr))<0) {
    perror("połączenie nieudane");
    return -1;
    }

  //int fd = open("myfile", O_WRONLY | O_TRUNC);
   ZeroCopyOutputStream* raw_output = new FileOutputStream(fd);
   CodedOutputStream* coded_output = new CodedOutputStream(raw_output);

   coded_output->WriteVarint32(300);

   delete coded_output;
   delete raw_output;
   close(fd);

C#app

var str = client.GetStream();
while(str.DataAvailable) {
                b = (byte)str.ReadByte();
                Console.Write("{0:x2}  ", b);
            } 

我认为应该没有区别。我无法向自己解释。你知道怎么了吗?

1 个答案:

答案 0 :(得分:3)

我猜你正在使用hexdump(或od)来显示文件内容,而且你实际上没有问题; - )

演示:

$ echo -n ab > file
$ hexdump file
0000000 6261          # notice this is 'ba'
0000002
$ hexdump -C file
00000000  61 62                                             |ab|
00000002

如果没有选项,hexdump将以16位块的形式解释数据,而不是逐字节。使用-C按顺序获取每8位数量的输出。

你不会在big-endian机器上出现这个(显示)问题。