我创建了一个包含4,000,000个"double"值的二进制文件(总共32MB).然后,我将其压缩,令我惊讶的是,文件仅缩小到46KB.
这差不多是百分之百!这是真的吗?或者我在这里遗失了什么?
基本上,我有一个数据字节串,如:( \x00\x00\x00\x00 \x08\x00\x00\x00 \x05\x00\x00\x00空格仅用于可见性,实际字节串中没有空格字节).数据是小端的.
现在,我需要提取第二个4字节组(\x08\x00\x00\x00,即128),并将它们转换为无符号长整数.所以,uint32_t输入.
基本上,我正在做的是: moveBlock(&gdata->str[4], &second_group, 4);
moveBlock宏在哪里:#define moveBlock(src,dest,size) memmove(dest,src,size).我使用宏因为我个人更喜欢参数的顺序,如果有人在想.
gdata->str是指向gchar *(参考此处)的指针,gdata是GString *(参考此处).
second_group被定义为uint32_t.
所以,这有时会起作用,但并非总是如此.老实说,我不知道我做错了什么!
谢谢!
PS:代码有点冗长和奇怪,我不认为通过这一切都是相关的.除非有人要求,否则我不会不必要地混淆这个问题
在go中通过HTTP接收二进制数据的最佳方法是什么?就我而言,我想将zip文件发送到我的应用程序的REST API.goweb特有的例子很棒,但net/http也很好.
我正在使用bsdiff.exe构建一个软件补丁并将其与bspatch.exe一起应用,到目前为止,对于小于120MB的文件没有任何问题.我有一个二进制文件以前是21MB,现在是77MB,而bsdiff似乎无限期挂起.
根据文档,"bsdiff非常需要内存.它需要max(17*n,9*n + m)+ O(1)字节的内存,其中n是旧文件的大小,m是大小新文件." 这解释了大文件的问题,但是当delta较大时似乎会出现问题.
有没有人有这方面的任何信息?任何事情都会有所帮助,谢谢!
我有二进制流,我希望它以字节转换.之后我想将它下载到SD卡中.
我的网络服务:
POST /**********Mobile/**********.asmx HTTP/1.1
Host: ***.***.*.*
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/GetDocument"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDocument xmlns="http://tempuri.org/">
<DocumentID>string</DocumentID>
</GetDocument>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDocumentResponse xmlns="http://tempuri.org/">
<GetDocumentResult>string</GetDocumentResult>
</GetDocumentResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我在想的是
SoapObject DocumentRequest = new SoapObject(NAMESPACE, GET_DOCUMENT_METHOD);
DocumentRequest.addProperty("DocumentID", ID);
Log.i("DocumentID", ID);
SoapSerializationEnvelope Envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.dotNet = true;
Envelope.setOutputSoapObject(DocumentRequest);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION_GETDOCUMENT, Envelope); …Run Code Online (Sandbox Code Playgroud) 我有一个Web服务来检索转换为字符串的图像,并在我的Android应用程序中转换回二进制数组.但不幸的是在停止时有一个强制关闭错误.
我正在使用这里解释的代码来填充imageView:
显示来自byteArray的图像
这是我在C#中的Web服务方法,它向我发送数据:
public String GetPersonImage()
{
int PersonCode = 1;
JPerson person = new JPerson(PersonCode);
Image personImage = person.PersonImage;
if (personImage == null)
return "Nothing";
using (MemoryStream ms = new MemoryStream())
{
personImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return Convert.ToBase64String(ms.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图将我的数据放入ImageView的方式:
String pic = t.execute().get();
byte[] picData = pic.getBytes();
ImageView imgPerson = (ImageView) findViewById(R.id.imgPerson);
Bitmap bitmap = BitmapFactory.decodeByteArray(picData, 0, picData.length);
imgPerson.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)
pic变量包含来自Web服务的数据.这是我的原木猫:
11-13 14:08:23.092: D/dalvikvm(29229): GC_FOR_ALLOC freed 2290K, 41% free 8004K/13420K, paused 27ms, total 27ms
11-13 14:08:23.092: I/dalvikvm-heap(29229): …Run Code Online (Sandbox Code Playgroud) 我试图从字节对象中提取数据.例如:从b'\x93\x4c\x00'我的整数隐藏从第8位到第21位.我试图这样做,bytes >> 3但这不可能有多个字节.我也尝试用struct解决这个问题,但字节对象必须具有特定的长度.
如何将位移到右边?
我正在尝试创建一个CSV文件,该文件将在服务器上以UTF-16LE编码保存,然后将结果传递给客户端.这就是我在Coffeescript中做的事情:
Meteor.methods {
iconv: (data, from="UTF-8", to="UTF-16LE") ->
Iconv = Meteor.require('iconv').Iconv
iconv = new Iconv(from, to)
res = iconv.convert(data)
res
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我用服务器从服务器写入文件
fs.writeFileSync('/tmp/test.csv', res)
Run Code Online (Sandbox Code Playgroud)
文件正确生成.但是,我想避免在服务器上创建文件并将其直接保存在客户端上(使用filesaver库).示例客户端代码如下所示:
exportToCsv = (data="tête", filename) ->
callback = (err, res) ->
blob = new Blob([res], {type:'text/csv;charset=UTF-16LE'})
saveAs(blob, filename)
Meteor.call('iconv', data, callback)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在测试的数据是一个带有特殊字符的简单字符串('ê').我的问题是我无法将nodejs缓冲区传递给客户端.它会自动序列化为:
Object {0: 116, 1: 0, 2: 234, 3: 0, 4: 116, 5: 0, 6: 101, 7: 0}
Run Code Online (Sandbox Code Playgroud)
而不是我在服务器上获得的缓冲区输出:
<Buffer 74 00 ea 00 74 00 65 00>
Run Code Online (Sandbox Code Playgroud)
问题不在于从十六进制到十进制的转换,我知道我可以使用某些东西转换回十六进制Number(116).toString(16).但是如何在blob中将此数据写为二进制?
我在数据框中有以下形式的二进制事件数据:
year A B C D
1990 0 0 1 0
1991 0 1 1 0
1992 0 0 0 1
1993 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
总共可能有大约50个系列,大约25年.
我的目标是在一个图中显示所有系列,以可视化系列的聚合视图.
即我想在一个图中绘制所有数据的图形,因此对于每个列,将有一个单独的面板在彼此之上.每个面板可以是简单的直方图(即type="h")以可视化二进制数据.
除了最底部的面板之外,面板之间自然应该没有x轴标签和刻度等.
现在,我可以手动执行此操作,par(mfrow=c(rows, cols))然后分别plot(...)为每个系列执行此操作,但由于要绘制大量系列,这是不可行的.或者我可以写一个for循环来处理它,但必须有更好的方法来实现它.
如果不按面板逐个手动执行此操作,我该怎么办?如果有更好的方法可以在一个图中可视化所有系列的聚合视图,欢迎提出建议.例如,如果有一种方法可以在没有单独面板的情况下执行此操作.
后续问题
关于ggplot2在Ben的答案中格式化解决方案:
1)目前,列标题(不知道确切名称,但"系列标题")位于右侧,呈90°角,因此它们相互重叠,因为名称是国家名称.我希望那些位于每个面板左侧的角度为0°.
2)此外,目前每个面板都有自己的y轴刻度标签0和1,在每个面板的LH侧,这些都没有必要,所以我想将它们删除.
最近我开始学习NASM,我想更深入地了解编译器,虚拟机和计算机通常如何工作的理论.我编写了一个小而简单的NASM程序,只是为了观察它在用NASM编译器构建之后创建的二进制代码.
ASM代码在这里:
section .data
c: db 420
section .text
global _start:
_start:
mov ecx, 1337
mov eax, eax
mov eax, ebx
mov eax, ecx
mov eax, edx
mov eax, ebp
mov eax, esp
mov ebx, eax
mov ebx, ebx
mov ebx, ecx
mov ebx, edx
mov ebx, ebp
mov ebx, esp
mov ecx, eax
mov ecx, ebx
mov ecx, ecx
mov ecx, edx
mov ecx, ebp
mov ecx, esp
mov edx, eax
mov edx, ebx
mov edx, ecx
mov edx, …Run Code Online (Sandbox Code Playgroud) binary-data ×10
android ×2
api ×1
assembly ×1
binary ×1
binary-diff ×1
binaryfiles ×1
bit-shift ×1
blob ×1
byte ×1
c ×1
downloadfile ×1
executable ×1
file ×1
glib ×1
go ×1
imageview ×1
javascript ×1
linux ×1
meteor ×1
nasm ×1
node.js ×1
patch ×1
plot ×1
python ×1
python-3.x ×1
r ×1
rest ×1
time-series ×1
ubuntu ×1