- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <inttypes.h>
union Str
{
uint64_t a;
char str[8];
};
int main(void)
{
union Str str;
memcpy( &str.str, "12345678", sizeof(str.a));
str.a = ((str.a & 0x0F000F000F000F00)>>8) +
((str.a & 0x000F000F000F000F)*10);
str.a = 1000000 * ((str.a >> 0 ) & 0xFF) +
10000 * ((str.a >> 16) & 0xFF) +
100 * ((str.a >> 32) & 0xFF) +
((str.a >> 48) & 0xFF);
//little-endian only. Можно переделать под big-endian
printf("%"PRIu64, str.a);
return 0;
}
Байтоебское преобразование строки из 8 цифр(в виде ascii символов) в число