【发布时间】:2014-10-01 19:39:24
【问题描述】:
我一直在尝试将经常被操作的数据存储到一个无符号字符的大数组中(因为 C++ 没有字节类型)。因此,如果我将浮点数存储到 char 数组中,它将占用 4 个无符号字符。很简单,除非现在我想在数组中编辑该数据,否则我需要同时访问所有 4 个元素,据我所知这是不可能的。 那么,有没有一种方法可以将 4 个无符号字符编辑为我想要的浮点值,而无需使用 memcpy()?
例子:
#include <iostream>
#include <string.h>
#include <stdint.h>
using namespace std;
struct testEntity {
float density;
uint16_t xLoc, yLoc;
uint16_t xVel, yVel;
uint16_t xForce, yForce;
uint16_t mass;
uint8_t UId;
uint8_t damage;
uint8_t damageMultiplier;
uint8_t health;
uint8_t damageTaken;
};
int main()
{
testEntity goblin { 1.0, 4, 5, 5, 0, 0, 0, 10, 1, 2, 1, 10, 0 };
testEntity goblin2;
unsigned char datastream[24];
unsigned char* dataPointer = datastream;
memcpy(&datastream, &goblin, sizeof(testEntity));
//I know that datastream[0..3] contains information on goblin.density
//How would I edit goblin.density without memcpy into another testEntity structure?
memcpy(&goblin2, &datastream, sizeof(testEntity));
return 0;
}
【问题讨论】:
-
如果我理解正确,您可以将
datastream转换为testEntity *,然后访问浮点值。 -
@Deduplicator 我知道这一点。我从来没有说过我没有,也没有试图混淆这两者。要么回答我的问题,如果你认为我需要澄清,那就给它,或者不要。
-
@user2233706 我会试试这个,等一下。
-
@Deduplicator 它有 24 个字节长。注意
density之后,同一行有两个uint16_t。