具体来说,那里有哪些程序以及压缩率最高的程序?我试过谷歌搜索它,但似乎经验会胜过搜索结果,所以我问.
我在这里看到了一些与确定文件相似性有关的问题,但它们都与特定域(图像,声音,文本等)相关联.作为解决方案提供的技术需要了解所比较文件的基础文件格式.我正在寻找的是一种没有此要求的方法,可以比较任意二进制文件,而无需了解它们包含的数据类型.也就是说,我希望确定两个文件的二进制数据的相似百分比.
为了给你提供更多的细节,即使这可能适用于很多事情,我确实有一个特定的问题,我正在努力.我目前也有一个有效的解决方案,但我不认为它是理想的.在比较方法方面可能存在许多优化,并存储结果.希望这里的一些人能够给我一些新的想法.我可能会在几天之后编辑一些关于我当前方法的信息,但我不想通过告诉你我是如何做的来偏见人们对这个问题的想法.
我正在研究的问题是视频游戏ROM映像的克隆检测.对于那些没有仿真经验的人来说,ROM是游戏卡带上的数据转储.ROM"克隆"通常是同一游戏的修改版本,最常见的类型是翻译版本.例如,NES 的原始最终幻想的日语和英语版本是克隆.游戏几乎分享了他们所有的资产(精灵,音乐等),但文本已被翻译.
目前有几个小组致力于维护各种系统的克隆列表,但据我所知,这一切都是手动完成的.我试图做的是找到一种方法来自动和客观地检测类似的ROM图像,基于数据相似性而不是"这些似乎是相同的游戏".检测克隆有几个原因,但其中一个主要动机是与固体压缩一起使用.这允许将所有游戏克隆压缩到同一档案中,整个压缩克隆集通常只占用比单个ROM中的一个更多的空间.
提出潜在方法时需要考虑的一些问题:
这是一个有趣的问题,我期待看到其他人能想到的东西.如果您想了解更多细节,请在评论中告诉我,我会尽力提供.
我不小心将一些大型二进制数据提交到了一些提交中.从那以后我更新了我的.gitignore,这些文件不再被提交了.但是我想回到旧的提交中,有选择地从存储库中删除这些数据,删除应该在.gitignore中的几个目录.我不想删除提交本身.
我将如何实现这一目标?我首选的方法是将.gitignore规则追溯应用于旧提交的某种方式...使用此方法的答案对其他人来说也非常有用,因为我确信我的问题不是唯一的.它也可以快速应用于通用解决方案,而无需针对每个用户的唯一目录结构进行大量自定义.
这是可能的,无论是我上面提出的简单方法,还是以更复杂的方式?
给定0和1的数组,找到最大子阵列,使得零和1的数量相等.这需要在O(n)时间和O(1)空间中完成.
我有一个算法在O(n)时间和O(n)空间中进行.它使用前缀和数组,并利用如果0和1的数量相同的事实,则sumOfSubarray = lengthOfSubarray/2
#include<iostream>
#define M 15
using namespace std;
void getSum(int arr[],int prefixsum[],int size) {
int i;
prefixsum[0]=arr[0]=0;
prefixsum[1]=arr[1];
for (i=2;i<=size;i++) {
prefixsum[i]=prefixsum[i-1]+arr[i];
}
}
void find(int a[],int &start,int &end) {
while(start < end) {
int mid = (start +end )/2;
if((end-start+1) == 2 * (a[end] - a[start-1]))
break;
if((end-start+1) > 2 * (a[end] - a[start-1])) {
if(a[start]==0 && a[end]==1)
start++; else
end--;
} else {
if(a[start]==1 && a[end]==0)
start++; else
end--;
}
}
}
int main() { …Run Code Online (Sandbox Code Playgroud) ....
finalize(char *hdrs, sendip_data *headers[], int index,
sendip_data *data, sendip_data *pack)
{
........
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我想要一个data和pack类型的十六进制转储,它们是sendip_data一种非常复杂的结构.实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确.因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 -
$hexdump -C file.txt
Run Code Online (Sandbox Code Playgroud)
另外因为这是一个/ w数据包的运行时生成所以我也不确定我认为需要的长度data和pack结构fread / fwrite.所以请给我一些建议.
我正在开发一个json rest web服务,它将使用使用backbone.js构建的单个网页应用程序来使用
该API将允许消费者上传与某个实体相关的文件,例如与项目相关的pdf报告
谷歌搜索并在堆栈溢出做一些研究我带来了这些可能的方法:
第一种方法: base64编码数据字段
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}
Run Code Online (Sandbox Code Playgroud)
第二种方法:多部分形式的帖子:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}
Run Code Online (Sandbox Code Playgroud)
作为回复我会得到一个报告ID,然后我会发一个帖子
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data
Run Code Online (Sandbox Code Playgroud)
然后只发送二进制数据
(看看这个:https://stackoverflow.com/a/3938816/47633)
第三种方法:将二进制数据发布到单独的资源并保存href
首先,我在客户端生成一个随机密钥,并在那里发布二进制内容
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data
Run Code Online (Sandbox Code Playgroud)
然后
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}
Run Code Online (Sandbox Code Playgroud)
(见:https://stackoverflow.com/a/4032079/47633)
我只是想知道我是否可以使用任何其他方法,每种方法的优点/缺点,以及是否有任何已建立的方法来处理这种要求
我对第一种方法的看法是,我必须在客户端上完全加载和base64编码文件
一些有用的资源:
我正在寻找有关通过端口80从远程GPRS设备发送/接收数据的最佳方法的建议.
在随机端口上创建普通TCP套接字工作正常,但许多运营商只允许端口80 HTTP流量通过其代理,然后期望HTTP ascii数据(他们可以根据需要修改标头).
那么,我的设备是否应该在持久的http连接上创建POST请求,然后从Web服务接收base64编码的响应?我不确定涉及二进制数据时移动代理的行为如何.有推荐的方法吗?
我可以调整设备的固件和服务器端应用程序.
[编辑]
我想知道是否有标准(或多或少)的方式来做到这一点.对于各种数据记录和工业系统,需要通过套接字连接发送大量二进制数据.对于以太网连接,通常只有适应某些防火墙的问题,但是持久的二进制连接在任意端口上建立都没有问题.
但是,移动ISP倾向于仅限制端口80的"数据计划".他们也可以随意使用HTTP标头,也可能是HTML数据本身.这是我需要识别潜在陷阱和规避它们的方法.
更新:解决了
我FTPClient.setFileType() 在登录之前打电话,导致FTP服务器使用默认模式(ASCII),无论我将其设置为什么.另一方面,客户端的行为就像文件类型已正确设置一样.BINARY模式现在完全按照需要工作,在所有情况下逐字节传输文件.我所要做的只是在wireshark中进行一些流量嗅探,然后使用netcat模拟FTP命令以查看发生了什么.为什么我两天前没有想到这个??谢谢,大家帮忙!
我有一个xml文件,utf-16编码,我使用apache的commons-net-2.0 java库的FTPClient从FTP站点下载.它提供了支持两种传输模式:ASCII_FILE_TYPE和BINARY_FILE_TYPE,不同之处在于ASCII将合适的地方行分隔符替换行分隔符('\r\n'或只是'\n'-十六进制,0x0d0a或只是0x0a).我的问题是:我有一个测试文件,utf-16编码,包含以下内容:
<?xml version='1.0' encoding='utf-16'?>
<data>
<blah>blah</blah>
</data>
这是十六进制:
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: …
我有数千万行从多维数组文件传输到PostgreSQL数据库.我的工具是Python和psycopg2.批量处理数据的最有效方法是使用copy_from.但是,我的数据大多是32位浮点数(real或float4),所以我宁愿不转换为real→text→real.这是一个示例数据库DDL:
CREATE TABLE num_data
(
id serial PRIMARY KEY NOT NULL,
node integer NOT NULL,
ts smallint NOT NULL,
val1 real,
val2 double precision
);
Run Code Online (Sandbox Code Playgroud)
这是我使用字符串(文本)使用Python的地方:
# Just one row of data
num_row = [23253, 342, -15.336734, 2494627.949375]
import psycopg2
# Python3:
from io import StringIO
# Python2, use: from cStringIO import StringIO
conn = psycopg2.connect("dbname=mydb user=postgres")
curs = conn.cursor()
# Convert floating point numbers to text, write to COPY input
cpy = StringIO()
cpy.write('\t'.join([repr(x) for x in …Run Code Online (Sandbox Code Playgroud) 假设我有字符串:
my_data = '\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
Run Code Online (Sandbox Code Playgroud)
我得到它是无关紧要的,但为了具体的东西,假设我从二进制文件中读取它.
我知道我的字符串是4(4字节)浮点数的二进制表示.我想把这些花车作为一个numpy阵列.我能做到:
import struct
import numpy as np
tple = struct.unpack( '4f', my_data )
my_array = np.array( tple, dtype=np.float32 )
Run Code Online (Sandbox Code Playgroud)
但是创建一个中间元组似乎很愚蠢.有没有办法在不创建中间元组的情况下执行此操作?
编辑
我还希望能够以这样的方式构造数组,以便我可以指定字符串的字节顺序.
binary-data ×10
python ×2
algorithm ×1
arrays ×1
backbone.js ×1
bulkinsert ×1
c ×1
comparison ×1
compression ×1
ftp ×1
fwrite ×1
git ×1
hexdump ×1
http ×1
java ×1
numpy ×1
pointers ×1
postgresql ×1
proxy ×1
psycopg2 ×1
random ×1
rest ×1
similarity ×1