相关疑难解决方法(0)

为什么这个结构32的大小?

这是结构.

//Structure pour communiquer les paramètres de traitement à travers le MMF
struct params_traitement_mmf
{
    int brilliance;
    double contraste;
    char convolution[9];
};
Run Code Online (Sandbox Code Playgroud)

这是我显示此结构大小的代码:

    char valeur[10];
    sprintf(valeur, "%d", sizeof(params_traitement_mmf));
    MessageBoxA(NULL, valeur, "rien", MB_OK);
Run Code Online (Sandbox Code Playgroud)

MessageBox显示32.谢谢!

c++

2
推荐指数
1
解决办法
277
查看次数

为什么这两个结构的大小不同?

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

#include<stdio.h>

struct csie {
  char c;
  short s;
  int i;
  double e;
};  

struct ceis {
  char c;
  double e;
  int i;
  short s;
};

int main(void) {
  printf("csie = %d\n", sizeof(struct csie));
  printf("ceis = %d\n", sizeof(struct ceis));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

csie = 16

ceis = 24

c struct

2
推荐指数
1
解决办法
210
查看次数

纯C/C++中的二进制序列化

我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.

在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?

另外,我怎样才能在纯C中实现这一目标?

c c++ binary implementation serialization

2
推荐指数
1
解决办法
8971
查看次数

这个结构的大小

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

我随机创建了一个Struct,它的大小让我感到惊讶,因为结果不等于我的计算结果:

int main( int argc, char ** argv ) {
    struct S
    {
        int i;
        int b;
        int c;
        long int e;
    };
    cout << sizeof (struct S) << endl; //sizeof is still an operator
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,3*int + 1*long int = 3*4 + 8 = 20.

但结果是24.

这4个字节来自哪里?

c++ sizeof

2
推荐指数
1
解决办法
177
查看次数

Python struct 格式字符大小,为什么比应有的大?

简单的问题是否执行以下操作:

import struct
struct.calcsize("6cHcBHIIQ")
Run Code Online (Sandbox Code Playgroud)

当我认为它应该是 28 时返回 32。

通过执行以下操作(缺少 Q):

import struct
struct.calcsize("6cHcBHII")
Run Code Online (Sandbox Code Playgroud)

它返回 20,这是我所期望的。

并做:

import struct
struct.calcsize("Q")
Run Code Online (Sandbox Code Playgroud)

返回 8,这是正确的。

为什么将 Q 添加到顶部会导致 12 个额外字节而不是 8 个?

Python 3,windows 机器。

谢谢。

python binary struct python-3.x

2
推荐指数
1
解决办法
543
查看次数

为什么fwrite为uint8_t写两个字节?

在C中不是很熟练.这可能只是一个新手问题.

我试图写3个字节到文件,但最终得到4.

#include <stdio.h>
#include <stdlib.h>

struct a {
  uint8_t x;
  uint16_t y;
};

int main()
{
  struct a record = { 1, 2 };
  FILE *fp = fopen("example.bin", "w");
  fwrite(&record, sizeof(struct a), 1, fp);
  fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我最终得到:

$ hexdump -C example.bin
00000000  01 00 02 00                                       |....|
00000004
Run Code Online (Sandbox Code Playgroud)

我在期待:01 02 00.

这是我的c编译器的版本,以防这是与硬件/编译器相关的.

$ cc --version
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

c binary posix

2
推荐指数
1
解决办法
198
查看次数

这种结构的大小出乎意料吗?

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

大家好,

我想知道下面结构的大小是多少.根据我的计算它应该是20.还有一件事是这种结构有什么方法考虑它的变量t的大小?

请忽略任何语法错误,我在32位机器上

 struct structc
{ 

char        c; 
double      d; 
int         s;
} t;

main()
{
printf("sizeof(structc_t) = %d\n", sizeof(t)); 
} 
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
193
查看次数

关于sizeof()类的不同类型

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

为什么输出8
不是sizeof(int)+sizeof(char) = 5吗?

class CBase 
{ 
    int a; 
    char p; 
}; 

int main() {

    cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
    getchar();
} ///:~
Run Code Online (Sandbox Code Playgroud)

c++ size sizeof

1
推荐指数
1
解决办法
128
查看次数

结构数组和相等数组之间的C++差异

例如,内存使用/执行速度是否有任何差异

struct test
{
   int a;
   float b;
   char c;
}; 

test ar[30];
Run Code Online (Sandbox Code Playgroud)

int arr1[30];
float arr2[30];
char arr3[30];
Run Code Online (Sandbox Code Playgroud)

?让我们假装,我们不是在谈论工作的舒适性或程序员的事情,只是执行速度/内存使用.

c c++ memory arrays struct

1
推荐指数
1
解决办法
131
查看次数

联合如何根据对象列表确定最大大小?

我不确定问题是否妥善,因为我理解了如何,但我不知道用不明白的东西写问题.这里是:

我有一些课程:

class Animal{};
class Rabbit{}: public Animal;
class Horse{}: public Animal;
class Mouse{}: public Animal;
class Pony{}: public Horse;
Run Code Online (Sandbox Code Playgroud)

我的目标是从此对象列表中找到最大大小,以便在之后的内存分配中使用它.我已将每个sizeof对象存储在一个数组中,然后获取数组的最大值.上级(我发送代码进行审核)建议我使用union来在编译前的时间找到最大的大小.这个想法对我来说似乎很好,所以我这样做了:

typedef union
{
  Rabbit rabbitObject;
  Horse horseObject;
  Mouse mouseObject;
  Pony ponyObject;
} Size;
Run Code Online (Sandbox Code Playgroud)

...因为union根据最大元素分配内存.下一个建议就是这样做:

typedef union
{
   unsigned char RabbitObject[sizeof(Rabbit)];
   unsigned char HorseObject[sizeof(Horse)];
   unsigned char MouseObject[sizeof(Mouse)];
   unsigned char PonyObject[sizeof(Pony)];
} Interesting;
Run Code Online (Sandbox Code Playgroud)

我的问题是:

Interestingunion 如何获得对象的最大大小?对我来说,创建一个unsigned char类型的数组是没有意义的sizeof(class).为什么第二个选项可以解决问题,而之前的联盟却没有?背后发生了什么,我想念?

PS:条件是这样的,我不能亲自问这个家伙.

先感谢您

c++

1
推荐指数
1
解决办法
127
查看次数

标签 统计

c++ ×6

c ×5

binary ×3

struct ×3

sizeof ×2

arrays ×1

implementation ×1

memory ×1

posix ×1

python ×1

python-3.x ×1

serialization ×1

size ×1