草庐IT

$二进制

全部标签

c++ - 从 Visual Studio 2008 升级到 Visual Studio 2013 时二进制大小增加 30%

我必须用多个项目维护一个庞大的旧代码库(不是我写的),其中大部分是C++语言。我的第一步是将代码库从VS2008升级到VS2013。两种解决方案都设置为针对大小进行优化(在发布版本中)。然而,二进制文件的大小现在增加了大约30%,几乎在所有二进制文件中都是如此——我很难解释这一点。这些项目大量使用ATL,而且我知道ATL9已移至静态库,但我怀疑这能否解释所有大小差异。任何想法:大小差异的解释是什么?由于这种尺寸变化,VS12是否更安全或具有更好的性能(寻找销售此开关的“关键点”)。寻找减少二进制文件大小的方法,从容易实现的目标开始,到更精细的工作。 最佳答案

c++ - 比较两个二进制数并得到不同的位

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Bestalgorithmtocountthenumberofsetbitsina32-bitinteger?我想写一个程序来获取比较两个数字时1的位数。如果我比较任意两个数字之间的位找出二进制数中1和0的不同之处。换句话说,异或(XOR)关系。比如22(二进制为10110)并将其与15(二进制为01111)进行比较第一个10110第二个01111结果11001答案是25,但我想要得到的是3,其中有三个不同的1和0。

微信小程序base64与十六进制相互转换(使用btoa、atob方法报undefined)

前言:搜到很多方法都用到了btoa()、atob(),这两个属于Window对象,在浏览器端可以直接使用,但是在小程序里面使用会报undefined。看到uniapp和微信小程序官方文档都提供了下面两个api,就想着经过ArrayBuffer对象转换一下。uni.base64ToArrayBuffer(base64)、wx.base64ToArrayBuffer(base64)将Base64字符串转成ArrayBuffer对象uni.arrayBufferToBase64(arrayBuffer)、wx.arrayBufferToBase64(arrayBuffer)将ArrayBuffer对

二进制安全虚拟机Protostar靶场(7)heap2 UAF(use-after-free)漏洞

前言这是一个系列文章,之前已经介绍过一些二进制安全的基础知识,这里就不过多重复提及,不熟悉的同学可以去看看我之前写的文章heap2程序静态分析https://exploit.education/protostar/heap-two/#include#include#include#include#includestructauth{#定义了一个名为auth的结构体charname[32];#定义了一个名叫name的变量,能存储32字节数据intauth;#定义了一个整数变量auth};structauth*auth;#auth指针用来指向structauth类型的对象char*service;

c++ - Qt 将负十六进制字符串转换为有符号整数

我正在读取i2c设备的寄存器,返回值的范围是-32768到32768,有符号整数。下面是一个例子:#i2cget-y30x0b0x0aw0xfec7在Qt中,我得到这个值(0xfec7)并希望将其作为带符号整数显示在QLabel中。变量stringListSplit[0]是一个值为'0xfec7'的QString。//NowupdatethelabelintmilAmps=stringListSplit[0].toInt(0,16);//triedqint32qDebug()问题是无论我尝试什么,我总是得到无符号整数,所以对于这个例子,我得到65223,它超过了指定的最大返回值。我需要

c++ - std::vector 中的二进制搜索

我正在尝试寻找vector元素在另一个vector中的位置。在这里,我有兴趣使用与binarysearch一样快的实现。我有不同的长度为100万或更长的vector,所以我正在尝试更快地实现某些目标。我的情况如下:1)我正在搜索的vector已排序。2)我正在搜索的元素将始终存在,即我没有notfound的情况,我想获得索引vector元素以更快的方式。我尝试了以下代码来获取vector元素的索引。#include#include#includetemplateIterbinary_find(Iterbegin,Iterend,Tval){Iteri=std::lower_bound(

c++ - 如何从 uint32_t 打印十六进制?

我一直在处理的代码要求我以十六进制打印类型为uint32_t的变量,填充为0,最小长度为8。到目前为止,我一直在使用该代码来执行此操作是:printf("%08lx\n",read_word(address));其中read_word返回类型uint32_t。我用过jx,llx等格式都没有用,请问有正确的格式可以用吗?编辑:我发现问题出在我传递的内容上。函数read_word从uint32_tvector返回一个值。似乎这是导致十六进制问题的问题。这是按引用/值传递的问题吗?如何解决?读字函数:uint32_tmemory::read_word(uint32_taddress){if(

c++ - 如何从命令行 (unix) 打印二进制 double 组

我得到了二进制文件,其中包含double。我如何将其打印到终端。我试过octaldump'od'但无法弄清楚我试过类似的语法head-c80|od-f但这不起作用,od的手册页非常糟糕。我已经编写了一个可以执行我想要的操作的c程序,类似于假设10doubleblock。doubletmp[10];while(fread(tmp,sizeof(double),10,stdin))for(inti=0;i谢谢。 最佳答案 你试过了吗hexdump效用?hexdump-e'[iterations]/[byte_count]"[format

c++ - 使用 << 运算符将二进制文件写入 std::fstream

出于某种原因,这种排序代码没有像我预期的那样工作:std::fstreamtheFile;theFile.open(,std::ios::beg|std::ios::out|std::ios::binary|std::ios::trunc);theFile可能是什么问题?我正在使用VisualStudio2010附带的MicrosoftC++编译器。 最佳答案 运算符的全部目的是将格式化数据写入流。如果你想写二进制数据,你应该使用ostream::write()或ostream::put().

c++ - 是否可以使用 lower_bound() 对普通结构数组进行二进制搜索?

我在内存中有一个16字节宽条目的数组。每个条目由两个64位整数字段组成。这些条目根据每个条目的第一个64位整数的数值进行排序。是否可以在不首先将数据加载到std::vector的情况下使用STL进行二进制搜索?我已经看到我可以在普通数组上使用STLlower_bound()方法,但我需要它来忽略每个条目的第二个64位字段。这可能吗? 最佳答案 您不需要使用std::vector,但如果您首先将数据转换为正确的数据类型,这是最简单的:#includestructmystruct{std::int64_tfirst,second;};关