有没有人对二进制协议有什么好的定义?实际上什么是文本协议?这些在线上发送的比特如何相互比较?
这是维基百科关于二进制协议的说法:
二进制协议是一种旨在或预期由机器而不是人类读取的协议(http://en.wikipedia.org/wiki/Binary_protocol)
哦加油!
更清楚的是,如果我有jpg文件将如何通过二进制协议发送,如何通过文本?当然,就线路上发送的比特/字节而言.
在一天结束时,如果你看一个字符串,它本身就是一个字节数组,所以2个协议之间的区别应该取决于在线上发送的实际数据.换句话说,关于如何在发送之前编码初始数据(jpg文件).
我不小心添加,提交并推送了一个巨大的二进制文件,我最近提交了一个Git存储库.
如何让Git删除为该提交创建的对象,以便我的.git目录再次缩小到合理的大小?
编辑:谢谢你的回答; 我试过几个解决方案.没有用.例如,GitHub中的文件从历史记录中删除了文件,但.git目录大小没有减少:
$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten
$ git log -p # looks nice
$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done. …Run Code Online (Sandbox Code Playgroud) 我试图了解Java如何在内部存储整数.我知道所有java原始整数都是有符号的(除了短?).这意味着该字节的字节中可用的位数较少.
我的问题是,所有整数(正数和负数)都存储为二进制补码或只是二进制补码中的负数吗?
我看到规格说明了x bit two's complement number.但我经常感到困惑.
例如:
int x = 15; // Stored as binary as is? 00000000 00000000 00000000 00001111?
int y = -22; // Stored as two complemented value? 11111111 11111111 11111111 11101010
Run Code Online (Sandbox Code Playgroud)
编辑
要清楚, x = 15
In binary as is: `00000000 00000000 00000000 00001111'
Two's complement: `11111111 11111111 11111111 11110001`
Run Code Online (Sandbox Code Playgroud)
因此,如果您的答案是 all数字存储为两个补码,那么:
int x = 15; // 11111111 11111111 11111111 11110001
int y = -22 // 11111111 11111111 11111111 11101010
Run Code Online (Sandbox Code Playgroud)
这里的混淆再次是标志说,两者都是负数.可能是我误读/误解了吗?
编辑 …
有哪些工具可以帮助解码未知的二进制数据格式?
我知道Hex Workshop和010 Editor都支持结构.对于已知的固定格式,这些在一定程度上是可以的,但是对于任何更复杂的东西都很难使用,特别是对于未知格式.我想我正在寻找一个脚本语言或可编写脚本的GUI工具的模块.
例如,我希望能够从有限的已知信息中找到数据块内的结构,这可能是一个神奇的数字.一旦我找到了一个结构,然后按照已知的长度和偏移字来寻找其他结构.然后以有意义的方式递归和迭代地重复此操作.
在我的梦想中,甚至可能根据我已经告诉系统的内容自动识别可能的偏移量和长度!
我正在尝试用Python 读取BMP文件.我知道前两个字节表示BMP公司.接下来的4个字节是文件大小.当我执行:
fin = open("hi.bmp", "rb")
firm = fin.read(2)
file_size = int(fin.read(4))
Run Code Online (Sandbox Code Playgroud)
我明白了:
ValueError:int()的基数为10的无效文字:'F#\ x13'
我想要做的是将这四个字节作为整数读取,但似乎Python将它们作为字符读取并返回一个字符串,该字符串无法转换为整数.我该怎么做才能正确?
使用此代码获取字符串并将其转换为二进制:
bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in 'hello'), 0))
Run Code Online (Sandbox Code Playgroud)
这个输出:
0b110100001100101011011000110110001101111
Run Code Online (Sandbox Code Playgroud)
哪个,如果我把它放到这个网站(在右边的网站上),我得到了我的hello回信息.我想知道它使用什么方法.我知道我可以将二进制字符串拼接成8位,然后将其与相应的值bin(ord(character))或其他方式匹配.真的在寻找更简单的东西.
我需要一个脚本/工具,它读取二进制文件并输出一个C/C++源代码数组(代表文件内容).有吗?
(这个问题早些时候被删除了.我把这个问题放回去了,因为它很有价值.我在谷歌上搜索的确没有找到任何东西.当然,编写自己的代码是微不足道的,但如果我能节省一些时间会发现这么简单的剧本.因此它很有价值.
这个问题也有很多下注而没有太多解释.请在你投票之前发表评论,为什么你认为这没有价值或价值不好.
这个问题也引起了很多关于我所问的问题的困惑.如果不清楚,请询问.我真的不知道如何更清楚.请参阅答案以获取示例.
另外(在这里提出问题之后),我已经有了几个答案.我只是想在这里(再次)把它们链接起来,因为我认为对于其他搜索它的人来说这可能是有用的.)
如果你有足够的内存可以用来计算O(1)中数字的二进制表示中1的数量的有效方法.这是我在网上论坛上发现的一个面试问题,但没有答案.有人可以提出一些建议,我想不出在O(1)时间内做到这一点的方法吗?
从github项目分发二进制文件的最佳实践是什么?
我能想到:
我有一个带有一些二进制数据的缓冲区:
var b = new Buffer ([0x00, 0x01, 0x02]);
Run Code Online (Sandbox Code Playgroud)
而且我想补充一下0x03.
如何附加更多二进制数据?我在文档中搜索但是为了追加数据它必须是一个字符串,如果没有,就会发生错误(TypeError:Argument必须是一个字符串):
var b = new Buffer (256);
b.write ("hola");
console.log (b.toString ("utf8", 0, 4)); //hola
b.write (", adios", 4);
console.log (b.toString ("utf8", 0, 11)); //hola, adios
Run Code Online (Sandbox Code Playgroud)
然后,我在这里看到的唯一解决方案是为每个附加的二进制数据创建一个新的缓冲区,并将其复制到具有正确偏移量的主缓冲区:
var b = new Buffer (4); //4 for having a nice printed buffer, but the size will be 16KB
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //<Buffer 00 01 02 00>
new Buffer ([0x03]).copy (b, 3);
console.log (b); …Run Code Online (Sandbox Code Playgroud)