字节数组转十进制

Byte array to Decimal

我有一个字节数组(64 位无符号整数):

byte array[8] = { 0x01,0xc9,0x98,0x57,0xd1,0x47,0xf3,0x60 }

我想把它翻译成十进制.. 当我使用计算器 windows 时,结果是:

128801567297500000

我找不到在 winapi 或 C 中执行此操作的方法..

感谢任何帮助。

对于 4 字节数组,我使用下面的工作代码

BYTE array[4] = { 0xC3,0x02,0x00,0x00 };
printf("Result : %d\n",(array[0]) | (array[1]) <<8 |(array[2]) <<16 | (array[3]) <<24  );
Result : 707

好吧,你可以使用

  1. sprintf() 将十六进制位置值打印为字符串。
  2. 使用 strtoll() 以 16 为底数将该字符串转换为十进制。

示例代码:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 128

int main()
{
    char array[8] = { 0x01,0xc9,0x98,0x57,0xd1,0x47,0xf3,0x60 };

    char arr[SIZE] = {0};
    int i = 0;
    unsigned long long res = 0;
    for (i = 0; i < 8; i++)
        sprintf((arr + (i * 2)), "%2x", (array[i] & 0xff));

    printf("arr is %s\n", arr);

    res = strtoll(arr, NULL, 16);
    printf("res is %llu\n", res);

    return 0;


}

在移位之前将字节转换为 64 位。目前它们被隐式提升为 int,这是一种 32 位数据类型。

假设您使用 stdint:

uint64_t result = ((uint64_t)b[0]) | ((uint64_t)b[1] << 8) | ((uint64_t)b[2] << 16) | ((uint64_t)b[3] << 24) | ((uint64_t)b[4] << 32) | ((uint64_t)b[5] << 40) | ((uint64_t)b[6] << 48) | ((uint64_t)b[7] << 56);

或倒序(数组为小端;这将得到您在 windows 计算器中看到的结果):

uint64_t result = ((uint64_t)b[7]) | ((uint64_t)b[6] << 8) | ((uint64_t)b[5] << 16) | ((uint64_t)b[4] << 24) | ((uint64_t)b[3] << 32) | ((uint64_t)b[2] << 40) | ((uint64_t)b[1] << 48) | ((uint64_t)b[0] << 56);

int i;
byte array[8] = { 0x01,0xc9,0x98,0x57,0xd1,0x47,0xf3,0x60 };
unsigned long long v;

//Change of endian
for(i=0;i<4;++i){
    byte temp = array[i];
    array[i] = array[7-i];
    array[7-i] = temp;
}
v = memcpy(&v, array, sizeof(v));//*(unsigned long long*)array;
printf("%llu ", v);