加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

char []到uint64_t

发布时间:2020-12-14 03:59:30 所属栏目:Windows 来源:网络整理
导读:我正在尝试将char数组转换为uint64_t,但它不起作用. 这是我的代码: char input[8];//Initialisation of inputint i,j;uint64_t paquet=0;for(i = 0; i 8; i++){ for(j = 0; j 8; j++) { paquet+= (input[i] j) 0x01; paquet = paquet 1; }} 解决方法 假设输
我正在尝试将char数组转换为uint64_t,但它不起作用.
这是我的代码:

char input[8];
//Initialisation of input
int i,j;
uint64_t paquet=0;
for(i = 0; i < 8; i++)
{
    for(j = 0; j < 8; j++)
    {
        paquet+= (input[i] >> j) & 0x01;
        paquet = paquet << 1;
    }
}

解决方法

假设输入缓冲区已将数据存储在一个小的 endian表示中,这意味着最低有效字节位于最低地址,最高有效字节位于最高地址,那么您可以执行以下操作.

#include <stdio.h>

#define __STDC_FORMAT_MACROS
#include <inttypes.h>

int main(void) 
{
    int i;
    unsigned char input[8] = {0x01,0x02,0x03,0x04,0x5,0x06,0x07,0x08 };
    uint64_t paquet = 0;
    for( i = 7; i >= 0; --i )
    {
        paquet <<= 8;
        paquet |= (uint64_t)input[i];
    }

    printf("0x%" PRIx64 "n",paquet);

    return 0;
}

您可以在ideone上看到工作示例.

如果缓冲区以big endian模式存储,则反转循环.

感谢m24p指出我的初稿中的错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读