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