Как проверить состояние отдельных байтов, хранящихся в адресе? - PullRequest
0 голосов
/ 28 августа 2018
#include <stdio.h>

int main(){

int x = 2271560481; // 0x87654321

for (size_t i = 0; i < sizeof(x); ++i) {

unsigned char byte = *((unsigned char *)&x + i);


printf("Byte %d = %u\n", i, (unsigned)byte);
}


return 0; 

}

Например, у меня есть этот код прямо здесь, отображающий вывод:

Byte 0 = 33
Byte 1 = 67
Byte 2 = 101
Byte 3 = 135

Как проверить условие, чтобы узнать, сохранено ли значение в адресе?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Ваш byte будет хранить последнее значение. Если вы хотите сохранить все значения, вам нужен массив. Рассмотрим пример ниже.

  #include <stdio.h>

    int main(){

    int x = 2271560481; // 0x87654321
    size_t i =0;
    unsigned char byte[sizeof x];
    for (i = 0; i < sizeof(x); ++i) {

        byte[i] = *((unsigned char *)&x + i);

        printf("Byte %d = %u\n", i, (unsigned)byte[i]);
      }

      if (byte[0] == 33 && byte[1] == 67 && byte[2] == 101 && byte[3] == 135) 
      {
        return 1;
      }
      return 0;
    }
0 голосов
/ 28 августа 2018

Ваш код загружает один байт за раз в byte, это не указатель, поэтому вы не можете его индексировать. У

unsigned char *bytePtr = ((unsigned char *)&x);

for (size_t i = 0; i < sizeof(x); ++i) {
printf("Byte %d = %u\n", i, bytePtr[i]);
}

теперь вы можете выполнить тестовую функцию, используя bytePtr

...