草庐IT

c++ - uint32_t 值对的交换哈希函数

我需要一个快速、简单的哈希函数来为一对uint32_t创建一个唯一标识符值-所以(2,7)的散列值相同和(7,2).有什么想法吗? 最佳答案 为了回答我自己的问题,解决方案是:uint64_thash(uint32_tx,uint32_ty){constuint64_ta=static_cast(x);constuint64_tb=static_cast(y);if(x可以改进到无分支版本uint64_thash(uint32_tx,uint32_ty){constuint64_ta=static_cast(x);constuint

c++ - Delphi:使用调试器调用 C dll 函数需要 15 秒,没有调试器需要 0.16 秒。为什么?

我有以下设置:用DelphiXE5编写并内置Debug64位的Delphi命令行应用程序。用MicrosoftVisualStudio2013编写并内置64位版本的Cdll。Delphi命令行应用程序调用Cdll中的函数。意外情况:在DelphiXE5IDE中调试Delphi命令行应用程序时,Cdll函数调用需要15秒。当直接启动相同的Delphi命令行应用程序(没有IDE,没有调试器)时,Cdll函数调用需要0.16秒。Delphi命令行应用程序源代码:programDelphiCpplibraryCall;{$APPTYPECONSOLE}{$R*.res}usesSystem.S

c++ - 该程序中的 16 位数学是否调用了未定义的行为?

前几天,我将我的Windows构建环境从MSVC2013升级到MSVC2017,你瞧,我的程序中一个多年来一直运行良好(并且在g++/clang下仍然运行良好)的函数突然开始给出不正确的结果使用MSVC2017编译。我能够重写函数以再次给出正确的结果,但这段经历让我感到好奇——我的函数是调用了未定义的行为(直到现在恰好给出了正确的结果),还是代码定义明确并且MSVC2017有问题吗?下面是一个简单的程序,显示了我重写前后的函数玩具版本。特别是,函数maybe_invokes_undefined_behavior()(如下所示)在使用值为-32762的参数调用时是否会调用未定义的行为?#

c++ - strtoull() 的输出在转换为 double 然后返回 uint64_t 时失去精度

考虑以下几点:#include#includeintmain(){std::cout打印:0xffffffffffffffff0x00xffffffffffffffff第一个数字只是转换ULLONG_MAX的结果,从字符串到uint64_t,按预期工作。但是,如果我将结果转换为double然后回到uint64_t,然后打印0,第二个数字。通常,我会把这归因于float的精度不准确,但更让我困惑的是,如果我转换ULLONG_MAX来自uint64_t至double然后回到uint64_t,结果是正确的(第三个数字)。为什么第二个和第三个结果不一样?编辑(@RadoslawCybulski

c++ - 错误 : uint64_t was not declared in this scope when compiling C++ program

我正在尝试一个简单的程序来打印steady_clock的时间戳值,如下所示:#include#includeusingnamespacestd;intmain(){cout(steady_clock::now().time_since_epoch()).count();cout但是每当我像这样编译时g++-oabcabc.cpp,我总是会遇到错误:Infileincludedfrom/usr/include/c++/4.6/chrono:35:0,fromabc.cpp:2:/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:error:#er

c++ - 在 Clang 中禁用 "cast from pointer to smaller type uint32_t"错误

我正在从事一个学校项目,该项目涉及在实验硬件上移植一大段C++代码。不幸的是,该硬件是64位的,并且代码包含许多指针算术实例,这些实例期望指针是32位的,即它通常是reinterpret_cast(ptr)。.一个一个地浏览它们会非常乏味,而且由于无论如何这是一个实验项目,我很乐意接受一个“hackish”的解决方法。因此,我修改了malloc的实现,以确保它永远不会分配超过4GB限制的内存。因此,从技术上讲,这些类型转换应该是有效的。问题是,我该如何向Clang解释这一点?我得到的错误是:error:castfrompointertosmallertype'uint32_t'(aka

c++ - 将 std::string 编码/解码为 UTF-16

我必须处理一种文件格式(读取和写入),其中字符串以UTF-16编码(每个字符2个字节)。由于ASCII表中的字符很少在应用程序域中使用,因此我的C++模型类中的所有字符串都存储在std::string(UTF-8编码)的实例中。我正在寻找一个库(在STL和Boost中搜索但没有运气)或一组C/C++函数来处理从文件格式加载或保存到文件格式时的这种std::stringUTF-16转换(实际上建模为字节流)包括代理对的生成/识别和所有Unicode内容(我承认我不是专家)...有什么建议吗?谢谢!编辑:忘了说它应该是跨平台的(Win/Mac)并且不能使用C++11。

c++ - 将 MAC 地址 std::string 转换为 uint64_t

我有一个std::string中的十六进制MAC地址。将该MAC地址转换为uint64_t中保存的整数类型的最佳方法是什么?我知道stringstream、sprintf、atoi等。我实际上用其中的前两个编写了一些转换函数,但它们看起来比我想要的更草率。那么,谁能告诉我一个好的、干净的转换方式std::stringmac="00:00:12:24:36:4f";进入uint64_t?PS:我没有可用的boost/TR1设施,也无法将它们安装在实际使用代码的地方(这也是为什么我没有复制粘贴我的尝试之一,对此感到抱歉!)。所以请保留直接C/C++调用的解决方案。如果您有有趣的UNIX系统

c++ - 在 C++ 中将字符串转换为 uint8_t 数组

我想要一个std::string对象(例如名称)到C++中的uint8_t数组。这函数reinterpret_cast拒绝我的字符串。由于我使用NS-3进行编码,一些警告被解释为错误。 最佳答案 如果你想要一个指向string数据的指针:reinterpret_cast(&myString[0])如果您想要一份string的数据:std::vectormyVector(myString.begin(),myString.end());uint8_t*p=&myVector[0]; 关于c

c++ - cout << hex 与 uint8 和 uint16 的行为

我注意到cout给我奇怪的结果,我找不到任何地方可以回答为什么。我所做的只是为uint8_t分配一些值和uint16_t然后尝试将它们写入标准输出。当我运行这个时:uint8_ta=0xab;uint16_tb=0x24de;cout我得到的结果:$./a.out24de$没有显示uint8_t的值。是什么原因造成的?我不认为对于一种类型没有针对另一种类型的cout实现。 最佳答案 std::uint8_t是unsignedchar的别名:typedefunsignedcharuint8_t;因此选择了采用char&的插入器重载,并