gpt4 book ai didi

c++ - 从十六进制中获取 LSB 的值(C 代码)

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:33 24 4
gpt4 key购买 nike

我在 C 中有这样的代码:

unsigned char const data[ ] = {0x0a, 0x1d, 0xf0, 0x07};

我需要提取它使得最终值为:

0xa1df7

如果十六进制值至少有 1 个零,我只能提取并让它工作:

unsigned char const data[ ] = {0x0a, 0xd0, 0xf0, 0x07};

使用下面的代码:

for(int i = 0; i < SIZE; ++i)
{
tmp = data[i];
if ( (data[i] <= 0x0F) && (((data[i] & 0x0F) == 0) || (data[i] & 0xF0) == 0)) // one of the hex is zero
{
tmp = ((tmp << 4) >> 4) << N[i];
std::cout << "foo: " << std::hex << tmp << ":" << std::endl;

}
else if ((data[i] >= 0x0F) && (((data[i] & 0x0F) == 0) || (data[i] & 0xF0) == 0) )
{
tmp = (tmp >> 4) << N[i];
std::cout << "bar: " << std::hex << tmp << ":" << std::endl;

}
else
{
std::cout << "result: " << std::hex << result << ":" << std::endl;
std::cout << "tmp << 8: " << std::hex << (tmp << 8)<< ":" << std::endl;
result = result | (tmp << 8);
std::cout << "result |= (tmp << 8): " << std::hex << result << ":" << std::endl;
}

result |= tmp;
std::cout << "boo: " << std::hex << result << ":" << std::endl;
}

似乎最后一个 else {...} block 对我来说很麻烦。有任何想法吗?谢谢!

最佳答案

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

unsigned char const data[ ] = {0x0a, 0x1d, 0xf0, 0x07};

int main(int argc, char*argv[]){
int i,r = 0;
for(i=0; i<sizeof(data); i++){
if(data[i] & 0xf0) r = (r<<4) + (data[i]>>4);
if(data[i] & 0x0f) r = (r<<4) + (data[i]&0x0f);
}
printf("%x\n",r);
return 0;
}

输出“a1df7”

关于c++ - 从十六进制中获取 LSB 的值(C 代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com