这是结构.
//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.谢谢!
#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
我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.
在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?
另外,我怎样才能在纯C中实现这一目标?
我随机创建了一个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个字节来自哪里?
简单的问题是否执行以下操作:
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 机器。
谢谢。
在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) 大家好,
我想知道下面结构的大小是多少.根据我的计算它应该是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) 为什么输出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) 例如,内存使用/执行速度是否有任何差异
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)
?让我们假装,我们不是在谈论工作的舒适性或程序员的事情,只是执行速度/内存使用.
我不确定问题是否妥善,因为我理解了如何,但我不知道用不明白的东西写问题.这里是:
我有一些课程:
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:条件是这样的,我不能亲自问这个家伙.
先感谢您