草庐IT

c++ - arr[0] 的大小怎么是 8 个字节?

我正在浏览寻找一种方法来查找给定矩阵中的行数和列数,而无需任何其他信息,我找到了这个答案。Givenamatrix,findnumberofrowsandcolumns这是上述问题的第二个答案的代码片段:intmain(){floata[9][2]={{0,1},{1,1}};introw=(sizeof(a)/sizeof(a[0]));intcol=(sizeof(a)/sizeof(a[0][0]))/row;printf("%d\n",row);printf("%d\n",col);return0;}sizeof(a[0])是怎么变成8的?在我的理解中,指针的通用大小在32位架

c++ - 在 C++ 中使用按位运算符将 4 个字符更改为 int

我必须做的是以二进制模式打开一个文件,其中包含旨在解释为整数的存储数据。我见过其他例子,例如Stackoverflow-Reading“integer”sizebytesfromachar*array.但我想尝试采取不同的方法(我可能只是固执或愚蠢:/)。我首先在十六进制编辑器中创建了一个简单的二进制文件,内容如下。000000470000001700000041如果将12个字节分成3个整数,这(应该)等于71、23和65。以二进制模式打开此文件并将4个字节读入char数组后,如何使用按位运算使char[0]位成为int的前8位,依此类推,直到每个char的位是int的一部分。Myin

c++ - UTF16(例如 wide-winapi 函数所使用的)字符是否总是 2 个字节长?

请为我解释一下,UTF16是如何工作的?考虑到以下几点,我有点困惑:C++中有一个静态类型WCHAR,是2个字节长。(显然总是2个字节长)(更新:如答案所示,这个假设是错误的)。大多数msdn和其他一些文档似乎都假设字符总是2个字节长。这可能只是我的想象,我无法举出任何具体的例子,但似乎就是这样。在C++或Windows中没有广泛使用的“超宽”函数或字符类型,因此我假设UTF16是所有需要的。据我所知,unicode的字符数比65535多很多,因此它们显然没有足够的2个字节空间。UTF16似乎是UTF8的更大版本,UTF8字符可以有不同的长度。那么,如果一个UTF16字符不总是2个字节

c++ - 当我从虚拟基派生 D 时,为什么 VS2015 中的 sizeof(D) 增加了 8 个字节?

我正在使用C++14§3.11/2中的示例:structB{longdoubled;};structD:virtualB{charc;}在clang、g++和VS2015中运行下面的代码片段之后#includestructB{longdoubled;};structD:/*virtual*/B{charc;};intmain(){std::cout我得到了以下结果:clangg++VS2015sizeof(longdouble)16168alignof(longdouble)16168sizeof(B)16168alignof(B)16168sizeof(D)323216alignof

c++ - 从最多 X 个字符构造 std::string,在空字符处停止

我正在从文件中的结构中读取字符串,其中每个字符串都有固定长度,并带有'\0'填充。如果存储的字符串需要整个长度,它们不会以零结尾。我目前正在用这样的方式构造std::string://charMyString[1000];std::stringstdmystring(MyString,ARRAYSIZE(MyString));但是,这也会复制填充。我现在可以修剪字符串,但是是否有一种优雅而快速的方法来首先防止复制?速度比空间更重要,因为这是循环运行。 最佳答案 简单的解决方案是:先计算出正确的长度按照Dieter的建议使用strnl

c++ - 按位运算符并将 int 转换为 2 个字节并再次返回

我的背景是php,所以进入像char这样的低级东西的世界是字节,是位,是二进制值,等等需要一些时间才能掌握。我在这里尝试做的是将一些值从Ardunio板发送到openFrameWorks(两者都是C++)。当要求发送数据时,此脚本目前的作用(并且适用于我可能添加的一个传感器)是:intvalue_01=analogRead(0);//whichoutputsbetween0-1024unsignedcharval1;unsignedcharval2;//someComplicatedbitshiftoperationval1=value_01&0xFF;val2=(value_01>>

c++ - 为什么这个源码要分配16个字节?

(gdb)disas/mmainDumpofassemblercodeforfunctionmain():2{0x080483f4:push%ebp0x080483f5:mov%esp,%ebp0x080483f7:sub$0x10,%esp3inta=1;0x080483fa:movl$0x1,-0x4(%ebp)4intb=10;0x08048401:movl$0xa,-0x8(%ebp)5intc;6c=a+b;0x08048408:mov-0x8(%ebp),%eax0x0804840b:mov-0x4(%ebp),%edx0x0804840e:lea(%edx,%eax,1)

c++ - 字符串的第 n 个字符到 int

如何将字符串的第n个字符转换为数字?我有一个表示为字符串的长数字,我想制作一个数组,其中每个字符都是单独的数字。我尝试使用以下代码:#include#include#includeusingnamespacestd;intmain(){stringstr="73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018";intints[1000]={0};for(inti=0;i>ints[i];}cout但它不起作用。 最佳答案

c++ - 读几个字节,跳过N个字节,再读几个字节。如何?

我有一个二进制文件a.bin,它包含768个字节。我想将字节16-256、272-512、528-768放入chardata[720]我做了类似的事情ifstreama1;a1.open("a.bin",ios::in|ios::binary)chartmp[256]a1.read(tmp,256)然后我做了一些循环并在逻辑上将tmp复制到data[720]。但这看起来真的很愚蠢。所以我想问一下如何将数据读取到字符数组的特定位置?a1.read(tmp[2],2)//不允许,如何实现?如何跳过某一天?a1.read(tmp16,16);我可以使用它来跳转16个字节并且从来没有使用tmp

c++ - 在 Arduino 错误上将 4 个字节转换为长字节

我有一个非常奇怪的不一致。我正准备读取Arduino上的二进制文件(对于midi播放器,如果您有兴趣的话)。如果我尝试将Arduino上的4个字节组合成一个long,它会给我一个错误的结果。但是,如果我在PC上使用等效代码,我会得到正确的值。输入是:0x12481248(0x12,0x48,0x12,0x48)(真正的随机数)。Arduino给出:4680。Code::Blocks给出:306713160。4680与0x1248相同,当您在Arduino上使用int而不是long时得到的结果(省略2个字节)。Arduino代码:voidsetup(){Serial.begin(5760