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

Is there a way to reach to a certain byte via pointer in shared memory?

本文关键字:指针 字节 内存 共享 有没有      更新时间:2023-10-16

我有一个指针,指向共享内存的第一个字节长,为66字节长。我想创建另一个指向共享内存中某个字节的指针(我要确定字节,因为我想从用户从用户中获取此信息,例如:"您想达到哪个字节?")。是否有一种方法可以通过共享内存的指针到达某个字节?

共享内存部分无关紧要:您拥有的是指针,您想增加 n bytes:

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*与值相当。)

对上述程序进行修改。带有未签名字节。

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;
}