LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Да, спасибо, по совету @firkax поглядел на формат, если значение меньше чем 2^32 то ошибок 0. Если больше то количество ошибок в старших 16 битах этого числа, ну и соответственное в младших 32 битах просто количество операций.

Ну или вот

#include <stdio.h>
#include <stdint.h>

/*------------------------------------------------------
 * Decode "Raw Read Error Rate" for Segate HDD 
 * for https://www.linux.org.ru/forum/talks/18056412
 * from LINUX-ORG-RU with ❤️ тем у кого нет калькулятора
 *------------------------------------------------------
 *
 * gcc main.c -o rrers
 * ./rrers 13171332274
 *
 * operations count: 286430386
 * operations with error count: 3
 * -----------------------------------------------------
 */

int main(int argc, char *argv[])
{
    uint64_t rrer = 0; /*Raw Read Error Rate value*/
    if(argc >= 2)
    {
      if(sscanf(argv[1],"%zu",&rrer) != 1)
      {
         fprintf(stderr,"use: rrers [NUMBER]\n");
         return 1;
      }
      printf("operations count: %d\n"
             "operations with error count: %d\n",
             (rrer & 0xffffffff), /*low 32 bit*/
             (rrer >> 0x20));     /*hig 16 bit*/
    }else{
      fprintf(stderr,"use: rrers [NUMBER]\n");
      return 1;
    }
    return 0;
}

:)

Исходная версия LINUX-ORG-RU, :

Да, спасибо, по совету @firkax поглядел на формат, если значение меньше чем 2^32 то ошибок 0. Если больше то количество ошибок в старших 16 битах этого числа, ну и соответственное в младших 32 битах просто количество операций.

Ну или вот

#include <stdio.h>
#include <stdint.h>

/*------------------------------------------------------
 * Decode "Raw Read Error Rate" for Segate HDD 
 * for https://www.linux.org.ru/forum/talks/18056412
 * from LINUX-ORG-RU with ❤️ тем у кого нет калькулятора
 *------------------------------------------------------
 *
 * gcc main.c -o rrers
 * ./rrers 13171332274
 *
 * operations count: 286430386
 * operations with error count: 3
 * -----------------------------------------------------
 */

int main(int argc, char *argv[])
{
    uint64_t rrer = 0; /*Raw Read Error Rate value*/
    if(argc >= 2)
    {
      if(sscanf(argv[1],"%lld",&rrer) != 1)
      {
         fprintf(stderr,"use: rrers [NUMBER]\n");
         return 1;
      }
      printf("operations count: %d\n"
             "operations with error count: %d\n",
             (rrer & 0xffffffff), /*low 32 bit*/
             (rrer >> 0x20));     /*hig 16 bit*/
    }else{
      fprintf(stderr,"use: rrers [NUMBER]\n");
      return 1;
    }
    return 0;
}

:)