我想问一下,因为我觉得很奇怪:编写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);
}
我认为应该没有区别。我无法向自己解释。你知道怎么了吗?
答案 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机器上出现这个(显示)问题。