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*を指示するため、にキャストする必要があります。バイト単位でインクリメントする必要があり、そのタイプです(サイズは常に1です)。T* + nsizeof(T)char

(aを介して値をエイリアシングすることchar*は問題ありません。)

于 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 に答える