0

我有一个指向共享内存的第一个字节的指针,该内存长 66 个字节。我想创建另一个指向共享内存中某个字节的指针(我说某个字节是因为我想从用户那里以整数形式获取此信息,例如:“您想要到达哪个字节?”)。有没有办法通过共享内存的指针到达某个字节?

4

2 回答 2

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)。

(通过 achar*为值起别名是可以的。)

于 2012-10-19T20:54:43.640 回答
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;
}
于 2012-10-19T21:12:45.937 回答