我将十六进制值存储在 uint64_t 变量中。当我调用strtoull()
将字符串转换为十六进制值时,我得到了正确的结果,但是当我左移 ( <<
) 32 时,我丢失了前两位数。
我正在测试的字符串是"398a59b412"
. 我希望能回来398a59b41200000000
,但我得到的不是这个8a59b41200000000
。
#include <openssl/aes.h>
#include <openssl/modes.h>
#include <openssl/rand.h>
#include <openssl/hmac.h>
#include <openssl/buffer.h>
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#define u8 unsigned char
#define INT_BITS 32
unsigned long long int ecountGeneration()
{
char *test_count = "398a59b412";
unsigned long long x = 0x398a59b412 | 0x00;
const char *test_bearer = "15";
const char *test_direction = "1";
unsigned long long result;
int64_t result_count = 0;
//errno = 0;
result_count = strtoull(test_count, '\0', 16);
uint64_t result_bearer = strtoull(test_bearer, NULL, 16);
uint64_t result_direction = strtoull(test_direction, NULL, 16);
result_count = result_count | 0x0;
uint64_t x1 = result_count<<32;
printf("-->%" PRIx64 "\n" ,x1);
uint64_t x2 = result_bearer<<27;
uint64_t x3 = result_direction<<26;
uint64_t x4 = x1 | x2 | x3;
printf("----->%" PRIu64 "\n" , x1);
return result;
}