草庐IT

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++ - 将 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&的插入器重载,并

c++ - 我如何从 uint8_t vector 创建一个 istream?

我正在为过去只能读取本地文件的代码添加通过网络获取数据的功能。我正在使用的网络库以vector的形式发送和接收数据.我希望能够在读取文件后重用处理数据的代码,但该代码需要一个std::istream,有没有办法让istream读取vector数据?这是相同的数据,所以我觉得应该有一种方法,但我一直无法找到或弄清楚如何做的代码。当前代码:std::ifstreamstream("data.img",std::ios::in|std::ios::binary|std::ios::ate);if(!stream.is_open()){throwstd::invalid_argument("C

c++ - 奇怪的 uint32_t 到 float 数组转换

我有以下代码片段:#include#includestaticconstsize_tARR_SIZE=129;intmain(){uint32_tvalue=2570980487;uint32_tarr[ARR_SIZE];for(intx=0;x(arr[x]);}printf("%s\n",arr_dst[ARR_SIZE-1]==arr_dst[ARR_SIZE-2]?"OK":"WTF??!!");printf("magic=%0.10f\n",arr_dst[ARR_SIZE-2]);printf("magic=%0.10f\n",arr_dst[ARR_SIZE-1]);r

c++ - 为什么 int 加上 uint 返回 uint?

int加上unsignedint返回一个unsignedint。应该这样吗?考虑这段代码:#include#include#includeclasstest{staticconstintsi=0;staticconstunsignedintui=0;typedefBOOST_TYPEOF(si+ui)type;BOOST_STATIC_ASSERT((boost::is_same::value));//fails};intmain(){return0;} 最佳答案 如果“应该”是指“我的编译器的行为是否符合标准”:是。C++2003

c++ - __u8 和 uint8_t 之间的区别

谁能解释一下uint8_t和__u8之间的区别?我知道uint8_t是在stdint.h中定义的,它们在每个unix系统上都可用。/*Unsigned.*/typedefunsignedcharuint8_t;typedefunsignedshortintuint16_t;...如果我使用它们,那么我的意图是显而易见的。现在我偶然发现了__u8和__u16类型。对我来说似乎是一样的。其中一些类型在linux/types.h中定义#ifdef__CHECKER__#define__bitwise____attribute__((bitwise))#else#define__bitwise