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