草庐IT

$二进制

全部标签

c++ - qDatastream中的Qt二进制读取错误

我正在读取一个由传感器生成的二进制文件。我在读取不同精度(32或64)的float时遇到问题。我可以在MATLAB(64位版本)中阅读它们,但Qt(Windows上的32位版本)给出了错误的值。我可以读到dtmth(请引用下面的结构)。之后,我得到了baseline的值Inf。这个值实际上是0。如您所见,我更改了MSB(LittleEndian)。如果我保留BigEndian,我会得到0作为基线,但其他值是错误的。我的桌面是64位的。我检查了字节数,它们是正确的。我认为问题是机器精度。QDataStreamin(&file);in.setByteOrder(QDataStream::L

c++ - 找出(在 C++ 中)二进制数是否是另一个的前缀

我需要一个带有这样标题的函数:boolis_prefix(inta,intb,int*c){//...}如果a是,读取为二进制数字字符串,b的前缀,然后将*c设置为b的其余部分(即“b比a多”)并返回true。否则,返回假。假设二进制字符串总是以“1”开头。当然-通过逐位比较很容易做到(左移b直到b==a)。但是有没有更有效的解决方案,无需迭代位?示例:a=100(4),b=1001(9)。现在将*c设置为1。 最佳答案 可以用自己喜欢的"fast"methodtofindthehighestsetbit.让我们调用函数msb()。

c++ - VS2010 和 VS2012 之间的二进制 C++ 库兼容性?

我对VS2010和VS2012之间编译库的二进制兼容性感到困惑。我想迁移到VS2012,但是许多闭源二进制SDK仅适用于VS2010,例如用于连接硬件设备的SDK。传统上,据我所知,VisualStudio对编译器版本非常挑剔,在VS2010中,您无法链接到为VS2008编译的库。我现在感到困惑的原因是,我正在迁移到VS2012,我已经尝试了几个项目,令我最惊讶的是,他们中的许多人都可以毫无问题地跨版本工作。注意:我不是在谈论v100模式,据我所知,它只是VS2010编译引擎之上的VS2012GUI。我说的是在VS2012中打开一个VS2010的解决方案,点击更新,看看会发生什么。当链

c++ - 从二进制文件中获取源文件(和位置)列表

我在Linux发行版中工作。我正在编写一个C/C++程序,该程序需要一个二进制(可执行文件)编译时使用的源文件列表。当然,我使用带有-g标志的GCC编译了二进制文件。使用gdb我发现二进制文件的格式是DWARF2:(gdb)infosourceCurrentsourcefileissrc/main.cppCompilationdirectoryis/path/to/sourceLocatedin/path/to/source/src/main.cppContains43lines.Sourcelanguageisc++.CompiledwithDWARF2debuggingformat

WSAsend 数据包的 C++ 奇怪十六进制转储

http://prntscr.com/2ctnoz我正在HookWSAsend函数并转储数据包。ASCII转储有效,但HEX转储有时会显示您在屏幕上看到的内容(FFFFFFDD),知道为什么吗?代码:intWINAPImyWSASend(SOCKETs,LPWSABUFlpBuffers,DWORDdwBufferCount,LPDWORDlpNumberOfBytesSent,DWORDdwFlags,LPWSAOVERLAPPEDlpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine){//PacketL

c++ - 有什么方法可以在运行时不间断地动态更新二进制文件(可执行文件)?

假设我们在1年前用C++制作了一个程序,它一直在连续工作,没有任何停止!在1年前,我们不知道有一天我们应该更新它(由于修复了一些错误)。所以我们没有实现任何DSU(动态软件更新)说明。它也不在让我也可以访问它的内存或上下文的虚拟机中运行。现在如何在不停止的情况下对其进行更新(添加或删除一些函数、数据类型或指令)。有什么建议吗?谢谢。 最佳答案 您必须为其附加一个调试器。在不会破坏任何东西的执行点停止它,替换可执行镜像,重新对齐指令指针,如果您选择了错误的中断点,您还必须重新对齐堆栈并修改可能受到影响/添加的变量新的代码。这比您想拥有

c++ - 罗马数转十进制数,获取垃圾值

我必须创建一个程序来将罗马数字转换为十进制数字,我得到的输出是垃圾值。事实上,我已经仔细检查了我的逻辑,它似乎是正确的。我该如何纠正?这是我的代码:#include#includeusingnamespacestd;classRomanType{charstr[10];intd;public:voidaccept(){cout>str;convert(str);}voidconvert(charstr1[10]){intj=0;for(j=0;j 最佳答案 几点:不要直接跳转到解析高值(value)罗马字。仅从I、V和X开始(即首先

java - 在 Java 中读取 C++ 二进制文件

我有一个500MB的二进制文件。有一堆float条目。它是由C++程序编写的。我会像这样用C++加载它。voidload(charf_name[],intsize,floatdata[]){std::fstreamf_bin(f_name,std::ios::in|std::ios::binary);f_bin.seekg(std::ios::beg);f_bin.read((char*)data,size*sizeof(float));f_bin.close();}float*data;intsize=123456789;data=newfloat[size];load("myFil

c++ - 如何使用 pin 工具跟踪二进制检测中的特定循环?

我刚开始使用intelpin工具,想跟踪二进制文件中的某个循环,但是我发现每次运行时指令的地址在每次运行中都发生了变化,我该如何找到特定的指令或特定的循环,即使它在每次运行中都发生变化?编辑0:我有以下地址,其中一个是RVA:(地址的第一部分(小地址)对于每次运行都是不变的,但是每次运行都会更改最后一部分(大地址)地址loop_repeationNo._of_Instruction_In_Loop419594218419597213...............14051305256648012............ 最佳答案 t

c++ - 为带有参数的二进制文件运行 ldd

我知道ldd只能将二进制作为其参数我在这里问的是如何使用二进制运行ldd,比如mybin,带有二进制参数。例如,mybin--myparam./configfile.conf。如果我为我的二进制文件添加conf文件,链接器会有所不同,因为它会在运行时使用插件的共享目标文件加载一些插件,plugin1.so类似这样的东西。我有一些未定义的引用问题,但我仍然不知道我丢失了哪个.so文件。如果我运行ldd./mybin,所有内容都已链接并且运行纯二进制文件没问题。一旦我为我的二进制文件添加了conf文件,让它加载一些插件共享库,那么我的二进制文件将在加载这些库时报告错误(编码异常抛出,带有一