История изменений
Исправление 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;
}
:)