首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中存储数据类型

在C中存储数据类型
EN

Stack Overflow用户
提问于 2011-11-01 22:55:58
回答 5查看 275关注 0票数 0

我在网上找不到任何关于如何将数据类型放入预先分配的内存块中的内容。我讨厌自己做内存管理,但在这种情况下,我必须这样做。

我有一个10字节长的内存块。(我的应用是64位的,使用Visual C。)我想要做的是将1个无符号整数放入字节0-3,将一个字符放入4,将字符放入5,将另一个无符号整数放入6-9。

我已经尝试过ssprintf了。

因此,我正在尝试找到一种方法: 1)将其存储到这块内存中;2)检索它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-01 23:03:37

要做到这一点,一个很好的方法是定义一个包含您所描述的数据的结构:

代码语言:javascript
复制
#pragma pack(1)
struct complex {
    uint32_t a; // 4 bytes
    char b[2]; // 2 bytes (without paddding)
    uint32_t c; // 4 bytes
};

然后你可以简单的填写你的数据:

代码语言:javascript
复制
struct complex var;
var.a = 10;
var.b[0] = 'x';
var.b[1] = 'y';
var.c = 20;

#pragma pack(1)指令告诉编译器使用1字节对齐。如果你不知道它是什么意思,你可以阅读关于data structure alignment的文章。

票数 2
EN

Stack Overflow用户

发布于 2011-11-01 23:00:22

如果不能选择使用struct,则可以使用以下方法将数据加载到内存块中。只需反其道而行之即可获得数据:

代码语言:javascript
复制
// char *mem = <10_bytes>;

unsigned int x = 54;
unsigned int y = 10;

memmove(mem, &x, 4);
memset(mem + 4, 'A', 1);
memset(mem + 5, 'B', 1);
memmove(mem + 6, &y, 4);
票数 1
EN

Stack Overflow用户

发布于 2011-11-01 23:01:59

您正在处理字节(并且您不存储类型,您只是在其中存储数据)。您可以声明一个struct来满足您的需求,也可以将数据的字节(例如,使用memcpy)复制到适当的位置,例如

代码语言:javascript
复制
unsigned int lastint;
char* buf;
memcpy (&lastint, buf+6, sizeof(lastint));

但是,请注意,处理这种低级二进制数据会使数据和应用程序极其不可移植(而且很脆弱,因为它会随着应用程序的发展而崩溃)。存在更多的“标准”二进制格式(例如,XDR或ASN1)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7968340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档