首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将unsigned char*转换为unsigned long long int?

问如何将unsigned char*转换为unsigned long long int?
EN

Stack Overflow用户
提问于 2021-03-12 21:08:57
回答 4查看 228关注 0票数 0

有没有人知道有一个库提供了一个执行这个逻辑的函数,或者一个执行这个逻辑的方法?

我在试着转换:

代码语言:javascript
复制
unsigned char test[] = "\x00\x00\x56\x4b\x7c\x8a\xc5\xde";

至:

代码语言:javascript
复制
94882212005342 / 0x0000564b7c8ac5de

我知道我可以遍历test中的每个字节,并利用sprintf将每个字节转换为字符串,并使用strcat将它们连接到一个缓冲区中,然后通过strtoull将缓冲区字符串转换为unsigned long long。然而,我正在寻找更全面和简单的东西。有没有这样的办法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-12 21:16:57

这只是数学而已。

代码语言:javascript
复制
unsigned char test[] = "\x00\x00\x56\x4b\x7c\x8a\xc5\xde";
unsigned long long num = 
     (unsigned long long)test[0] << 56 |
     (unsigned long long)test[1] << 48 |
     (unsigned long long)test[2] << 40 |
     (unsigned long long)test[3] << 32 |
     (unsigned long long)test[4] << 24 |
     (unsigned long long)test[5] << 16 |
     (unsigned long long)test[6] <<  8 |
     (unsigned long long)test[7] <<  0;

记住,在转换之前,要将类型转换为足够宽的范围。

您有8个值:

代码语言:javascript
复制
 { 0x00, 0x00, 0x56, 0x4b, 0x7c, 0x8a, 0xc5, 0xde }

它在小数中是:

代码语言:javascript
复制
 0 0 86 75 124 138 197 222

你想要拥有:

代码语言:javascript
复制
 94882212005342

即:

代码语言:javascript
复制
  94882212005342 = 0*2^56 + 0*2^48 + 86*2^40 + 75*2^32 + 124*2^24 + 138*2^16 + 197*2^8 +  222*2^0

这是一个数学运算。您可以编写ex test[0] * 72057594037927936ull,但它的可读性不如test[0] << 56。

票数 2
EN

Stack Overflow用户

发布于 2021-03-12 21:20:01

我用memmove或memcpy函数https://www.tutorialspoint.com/c做了一些非常类似的事情。

代码语言:javascript
复制
    long long int var = 0; 
    memmove( &var, test, sizeof(var) );

确保使用系统的正确字节顺序。

票数 1
EN

Stack Overflow用户

发布于 2021-03-12 23:41:16

仅供记录,您可以简单地这样做:

代码语言:javascript
复制
#include <stdio.h>
#include <inttypes.h>

int main(int argc, char *argv[])
{
    unsigned char test[] = "\x00\x00\x56\x4b\x7c\x8a\xc5\xde";
    uint64_t val=0;
    for(size_t i=0; i<8; i++)
      val |= (uint64_t)test[i] << (7-i)*8;
    printf("%" PRIu64 " %" PRIX64, val, val);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66600509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档