指针转换char *到int *而不复制

时间:2017-10-24 00:42:46

标签: c++ pointers

我有一个文件如下:

Offset   Type            Value         [meaning]
0000     32 bit integer  60000         count of data
0004     32 bit integer  32            width
0008     32 bit integer  32            height
0012     byte            1             data; ext.

我通过快速将文件内容转储到字符串来读取数据。

由于文件的大小,数据的性质以及其使用的id如何试图避免在整个地方复制它。

所以我希望使用指向数据的指针,以节省时间,但我不能让它们正常工作。

我喜欢这样做:

std::string mydata;
dumpdata("myfile.bin",mydata); //dumps data to reference string.
uint32_t* count = (uint32_t*)&mydata[4]; //32 bit integer.

我知道我忘记演员或其他什么,但我无法弄清楚它是什么。 我尝试的并没有奏效。

说清楚。我不想复制。我只想要指望那个区域并将其视为uint32_t,即使它是一个字节数组。

这可能是一个非常简单的问题,但其中一个"谷歌认为我试图转换ascii"事情,我不是。

我希望如果数据是:00002710H我会得到uint 10000.相反我得到270,991,360

1 个答案:

答案 0 :(得分:0)

  

我只想指望那个区域并将其视为uint32_t,即使它是一个字节数组。

这在标准C ++中是不可能的(在这个问题上也不是C)。

如果您的目的是阅读数据,那么可以写一个解决方案:

uint32_t get_count(std::string const& mydata)
{
    uint32_t x;
    std::memcpy(&x, &mydata[4], 4);
    return x;
}