我有一项通过网络提供压缩文件的服务。该 zip 包含 Windows 平台的可执行文件。
我正在使用 RubyZip 库来压缩文件,但该过程会损坏二进制文件。在我的本地服务器上,我们通过系统调用使用 zip 命令,它工作正常。
zip 命令在 Heroku 上不可用,我根本没有选择。
我正在使用这个类:
require 'zip/zip'
# This is a simple example which uses rubyzip to
# recursively generate a zip file from the contents of
# a specified directory. The directory itself is not
# included in the archive, rather just its contents.
#
# Usage:
# directoryToZip = "/tmp/input"
# outputFile = "/tmp/out.zip"
# zf = ZipFileGenerator.new(directoryToZip, outputFile)
# zf.write()
class ZipFileGenerator
# Initialize with the directory …Run Code Online (Sandbox Code Playgroud) 我有一个二进制值存储在 C 中的 char 中,我想将这个字节转换为 C 中的有符号 int 。目前我有这样的东西:
char a = 0xff;
int b = a;
printf("value of b: %d\n", b);
Run Code Online (Sandbox Code Playgroud)
标准输出的结果将为“255”,所需的输出为“-1”。
我遇到过这个文件 - 并且非常了解它的结构......
\n\n512 字节标头(其中包含字段定义记录的“计数器”。)
\n\n768 字节字段定义记录 - 多个实例。显然后续数据记录中的每个字段都有一个。
\n\n数据 - 在固定长度记录中(数据记录长度也在标头中。)
\n\n我检查了来自同一来源的几个文件 - 每个文件的前几个字节都不同 - 彼此不同。
\n\n有一个十六进制字符的字符串与我的示例中相同 - 但这些十六进制字符不代表可读字符串: \xc5\xa0\xc2\xbe\xc5\xbdY#d\xc3\x8b@=q\ xc3\x92\xc3\xa3\xc2\xbcd\xc3\x90
\n\n标头中没有人类可读的字符串。
\n\n有人知道我这里有什么样的文件吗?
\n\n编辑\n昨晚,我能够到达源计算机 - 并注意到 - 对于这个文件,至少还有其他三个具有相同基本名称的文件 - 扩展名:.blb、.blk 和 .idx。
\n\n我还没有这些附加文件的副本......
\n\n这有帮助吗?有人知道这会进入什么样的“数据库”吗?
\n我想将 Python 浮点数转换为字节数组,将其编码为 32 位小端 IEEE 浮点数,以便将其写入二进制文件。
在 Python 3 中执行此操作的现代 Pythonic 方法是什么?对于整数我可以这样做,但是对于浮点数my_int.to_bytes(4,'little')没有方法。to_bytes
如果我可以一次性为 numpy 数组中的每个浮点执行此操作(使用 dtype numpy.float32),那就更好了。但请注意,我需要将其作为字节数组获取,而不仅仅是立即将数组写入文件。
有一些听起来类似的问题,但它们似乎主要是关于获取十六进制数字,而不是写入二进制文件。
对服务器的 Axios 请求以二进制字符串形式响应 PDF 的内容。
\n\nexport const fetchPDFfile = async (id: string): Promise<string> => {\n const { data } = await http.get<string>(`${baseUrl}/${id}.pdf`);\n return data;\n};\nRun Code Online (Sandbox Code Playgroud)\n\nChrome 开发工具和控制台记录数据的响应如下:
\n\n%PDF-1.4\n%\xc3\xa2\xc3\xa3\xc3\x8f\xc3\x93\n2 0 obj <</ColorSpa ......\n..........\nstartxref\n10991\n%%EOF\nRun Code Online (Sandbox Code Playgroud)\n\nstring为 Axios 响应体的预期类型,对吗?或者它应该(投射到)Blob?现在我想在客户端下载这个 PDF 文件。关于此有很多问题,但没有一个对我有用,也没有一个有明确的答案。
\n\n所以到目前为止我所做的是(在 React 组件中):
\n\n const data = await fetchPDFfile(props.id);\n const blob = new Blob([data], { type: \'application/pdf\' });\n const href = window.URL.createObjectURL(blob);\n const theLink = document.createElement(\'a\');\n theLink.href = href;\n theLink.download = props.id + …Run Code Online (Sandbox Code Playgroud) 我的 Java 程序需要通过 QR 码发送二进制有效负载,但我无法让它工作。我尝试了几个QR码库和许多方法,但似乎都有这个问题。我当前的实现使用ZXING。
问题是我尝试过的所有 Java 库似乎都专注于 String 有效负载,并且不提供对二进制数据的支持。通常建议的解决方案是将二进制数据编码为 Base64。然而,我的数据已经接近二维码的大小限制。由于Base64编码导致33%的通货膨胀,我的数据太大了。我已经付出了巨大的努力来减少有效负载的大小,它目前由 4 个字符散列组成,并由新行分隔;所有这些都在 Java Deflator 类的最大级别压缩中。我无法让它变得更小。
我需要一种以最小的数据膨胀开销将二进制数据存储在二维码中的方法。
我有一个 32 位数字 (uint32),其中包含四个数字,如下所示:
以下代码有效,但我想让它更快
Var1=bitshift(fourbytes,-30);
Var2_temp=bitshift(fourbytes,-21);
Var2=bitand(Var2_temp,511);
Var3_temp=bitshift(fourbytes,-12);
Var3=bitand(Var2_temp,511);
Var4=bitand(fourbytes,2^12-1));
Run Code Online (Sandbox Code Playgroud)
例子:
fourbytes = 2149007896;
Run Code Online (Sandbox Code Playgroud)
结果是
Var1=2;
Var2=0;
Var3=372
Var4=536
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西
Var1=bin2dec(num2str(bitget(fourbytes,32:-1:31)));
Run Code Online (Sandbox Code Playgroud)
但这和 bi2de 一样慢得令人难以置信
bi2de(bitget(onebyte(1),32:-1:31),'left-msb');
Run Code Online (Sandbox Code Playgroud)
是我用 C 编写这部分的唯一选择,还是我缺少更好的方法?
我有各种二进制文件格式,我需要转储到某种文本格式,编辑然后重新编译(可能是二进制格式略有不同的版本).当然,我可以在C/C++中编写一堆实用程序代码来执行此类操作,并且可能利用库来处理文本方面(XML或JSON或其他),但这是一个不断出现的任务模式在我的工作中,在我看来,可能应该已经存在某种用于此类工作的通用工具.
显然需要某种方式来描述二进制文件格式 - 模式或类似 - 这需要支持所有明显的数据类型(字符串,各种大小的整数,bool等,浮点数也会很好),以及计数字段,长度字段,填充/对齐等等,以处理您在数据文件中找到的所有典型内容.拥有字节序支持也很有用,因为二进制文件可能具有与我们运行的平台不同的字节序.
如果这样的事情不存在我会感到非常惊讶,但到目前为止我还没有通过谷歌运气(你怎么甚至简洁地描述这样的实用工具或图书馆?).我记得最接近的是Apple的资源编译器/反编译器实用程序在"经典"Mac OS时代.这些使用了类C语法,头文件中的资源模板定义用于描述各种二进制资源的格式,您可以在这种类似C的源语法和二进制资源之间进行编译/反编译.
compiler-construction binaryfiles utility binary-data decompiler
我一直在使用localStorage以字符串格式存储一些二进制数据,虽然这个值是明确设置的(alert设置后立即设置,或者甚至设置后的一段时间,显示正确的值),但是当页面下次加载时它会丢失.
起初我认为这可能是因为数据包含空字节,所以我重新设计了压缩器,以便它永远不会输出它们.然而,这没有任何区别,因为价值仍然丢失.
我localStorage.testing = 1在设置二进制数据后立即添加.即使另一个丢失,也会保留此值.
我绝对肯定没有代码delete localStorage.myitem.
可能导致此问题的原因是什么?
如果它有帮助,这里是我试图存储的数据,以十六进制表示:
0x1103c0a0 0xd6cf0305 0xc0a0d6cf 0x0307c0a0 0xd6cf0309 0xc0a0d6cf
0x030bc0a0 0xd6cf030d 0xc0a0d6cf 0x0311c0a0 0xd6cf0313 0xc0a0d6cf 0x0301
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚测试过localStorage.testvalue = realvalue.replace(/[\x00-\x1f]/g,'');并成功保存了它.所以,我想知道规范在哪里说控制字符可能不会用在字符串中.
我有一些没有扩展名的文件.我想将扩展名与他们联系起来.为此,我编写了一个python程序来读取文件中的数据.我怀疑的是,如果不使用第三方工具,如何在没有扩展名的情况下识别其类型.
我只需要识别pdf,doc和文本文件.其他类型的文件是不可能的.
我的服务器是中心
binary-data ×10
binaryfiles ×2
python ×2
axios ×1
c ×1
casting ×1
decompiler ×1
file ×1
file-type ×1
heroku ×1
html5 ×1
java ×1
javascript ×1
matlab ×1
numpy ×1
qr-code ×1
ruby ×1
typescript ×1
utility ×1
windows ×1
zip ×1
zxing ×1