有没有办法通过共享内存中的指针到达某个字节?

时间:2012-10-19 20:51:13

标签: c++ pointers shared-memory

我有一个指针,指向共享内存的第一个字节,长度为66个字节。我想创建另一个指向共享内存中某个字节的指针(我说的是某个字节,因为我想从用户那里得到这样的信息,如:“你希望到达哪个字节?”)。有没有办法通过共享内存的指针到达某个字节?

2 个答案:

答案 0 :(得分:4)

共享内存部分无关紧要:你拥有的是一个指针,你想增加 n 字节:

T* p = /* pointer to whatever */;
char* nBytesIn = reinterpret_cast<char*>(p) + n;

或者在您的情况下,更安全:

char* byte_in_buffer(T* p, std::size_t n)
{
    if (n >= 66)
        throw std::out_of_range("Buffer is only 66 bytes!");

    return reinterpret_cast<char*>(p) + n;
}

您需要强制转换为char*因为指针算术指示T* + n递增sizeof(T);我们希望按字节递增,char是该类型(大小始终为1)。

(通过char*对值进行别名是可以的。)

答案 1 :(得分:0)

修改上述程序。用无符号字节。

typedef unsigned char byte_t;
byte_t *p = (byte_t *)/*whatever*/

byte_t return_byte(int number)
{
   if(n >= 66 && n <= 0){
       throw std::out_of_range("I don't know what you want");
   }
   byte_t *b = reinterpret_cast<byte_t*>(p)+n;
   byte_t retbyte = *b;
   return retbyte;
}