C语言 从数组提取到整数[已关闭]

r1wp621o  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(85)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question
如何在C语言中从数组0x00,0x50,0x52,0x45,0x01中提取数字0145525000?

#include <stdio.h>

int main()
   {
    uint8_t arr[] = {0x00, 0x50, 0x52, 0x45, 0x01};
    uint32_t number = 0;

    // Sorry i dont know how to solve this

    printf("Number: %d\n", number);

    return 0;
   }

字符串
有必要从最后一个元素到零转换成一个无符号整数吗?

rdlzhqv9

rdlzhqv91#

十六进制常量0145525000,将更正确地写像0x0145525000包含至少9十六进制数字(如果忽略前导0),不能在类型uint32_t的对象中表示。变量number应该声明为uint64_t类型。
现在,您需要编写一个循环,将数组arr中存在的十六进制值以相反的顺序存储到变量number中。
给你。

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main( void )
{
    uint8_t arr[] = { 0x00, 0x50, 0x52, 0x45, 0x01 };
    const size_t N = sizeof( arr ) / sizeof( *arr );
    uint64_t number = 0;

    for (size_t i = N; i != 0; )
    {
        number = 0x100 * number + arr[--i];
    }

    printf( "%010" PRIx64 "\n", number );
}

字符串
程序输出为

0145525000


for循环中的语句

number = 0x100 * number + arr[--i];


也可以像这样重写

number = ( number << 8 ) + arr[--i];

相关问题