按字節移動我有這個結構的共享內存(見codesnippet 1),所有值是十六進制值:c + +通過內存
Position 00: 55; // memory overall, byte 00 to 03;
Position 01: 00;
Position 02: 00;
Position 03: 00;
Position 04: 47; // memory for header information, byte 04 to 07;
Position 05: 00
Position 06: 00;
Position 07: 00;
Position 08: 00; // version, byte 08, 09;
Position 09: 00;
Position 0A: 64; // rate of refreshing memory between processes
Position 0B: 00;
Position 0C: 00;
Position 0D: 00;
Position 0E: 00;
Position 0F: 4L;
...
正如你可以在我所知道的意見看哪個字節代表什麼樣的信息。無論如何,我把內存放在一個結構中(參見codesnippet 2)。此結構中的屬性當前是整數值。值55和47存儲在前兩個屬性中。看起來,'00'將被忽略,我無法逐字節地讀取整個存儲器。我如何按字節讀取內存?
codesnippet 2:
struct Shm {
int memorySize; // size of memory space; min 4 bytes, Position 00 - 03; ie 55 is a hex value and means 84
int headerSize; // size of header space; min 4 bytes, Position 04 - 07; ie 47 (hex), so 71 (dec) same number as config-dialog
int byte3; // version number
int byte4; // refreshing interval in msec
...
Moroever有在存儲部分地區,其中包含一些字符 - 怎麼投這些字節值字符和創建它們的話,目前我只能投到int值(參見codesnippet 3)
int main(void){
std::cout << "*** Start SharedMemory ***\n";
HANDLE hMapFile;
...
Shm * pBuf = (Shm *) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
std::cout << " Debug memorySize " << ": " << dec << pBuf->memorySize << " (dec); " << hex << pBuf->memorySize << " (hex); " << &pBuf->memorySize << " (Adresse);\n"; // 84 Bytes
std::cout << " Debug headerSize " << ": " << dec << pBuf->headerSize << " (dec); << hex << pBuf->headerSize << " (hex);\n"; // 71 Bytes
std::cout << " Debug byte3 " << ": " << dec << pBuf->byte3 << " (dec); " << hex << pBuf->byte3 << " (hex);\n";
...
根據你所看到的,你的版本看起來很短,而不是整數。 –
感謝您的評論RetiredNinja,如何知道該版本是一個短而不是int?我猜是因爲它存儲在兩個字節而不是四個? – Jochen
是的,如果你想讓你的結構與你所顯示的數據一致,那麼你需要適當地調整變量的大小。如果只有16位,那麼你需要一個16位的變量。當然,一旦你這樣做了,你需要打包結構來強制下一個int在short之後對齊。 –