69,369
社区成员
发帖
与我相关
我的任务
分享
Y[0]=0x01;
Y[1]=0x02;
Y[2]=0x03;
Y[3]=0x04;
Y[4]=0x05;
Y[5]=0x06;
0x060504030201
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
unsigned int iv,i;
unsigned char BCD[5];//定长10位BCD码
unsigned char sv[11];
void main() {
iv=123456789;//最大10位无符号正整数
//INT2BCD
sprintf(sv,"%010u",iv);
for (i=0;i<10;i+=2) {
BCD[i/2]=(sv[i]<<4)|(sv[i+1]&0x0F);
}
printf("BCD=%02x%02x%02x%02x%02x\n",BCD[0],BCD[1],BCD[2],BCD[3],BCD[4]);
//BCD2INT
for (i=0;i<10;i+=2) {
sv[i]='0'|(BCD[i/2]>>4);
sv[i+1]='0'|(BCD[i/2]&0x0F);
}
sscanf(sv,"%010u",&iv);
printf("iv=%010u\n",iv);
getch();
}
char y[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
long long b = *(long long *)y & ~((long long)(~0) << (sizeof(y) * 8)); // b=0x060504030201
然后还有一个问题,怎么再把b给转回y[]呢?得到这个b之后要经过一系列运算后得到一个值,然后还有再转回char y[]形式的,请问怎么运算转回去呢?char y[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
long long b = *(long long *)y & ~((long long)(~0) << (sizeof(y) * 8)); // b=0x060504030201
{0x01,0x02,0x03,0x04,0x05,0x06}转为十进制的60504030201,可以不用生成16进制数,如下做:
char y[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
long long c = 0;
for(int i=sizeof(y) - 1; i>=0; i--)
{
c = c * 100 + ((y[i] >> 4) & 0x0f) * 10 + (y[i] & 0x0f);
} // c=60504030201
16进制转10进制,比如0x060504030201转60504030201,如下做:
long long b = 0x060504030201;
long long c = 0;
long long count = 1;
while(b)
{
c = c + (b & 0x0f) * count;
b >>= 4;
count *= 10;
} // c=60504030201
LZ可以随意组合得到你想要的最后结果 unsigned char y[] = {0x01,0x02,0x03,0x04,0x05,0x06};
printf("%#0.12llx \n",*(long long*)y);
printf("%lld \n",*(long long*)y);
int main()
{
char Y[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
long long result = 0LL;
for (int i = 0; i < 6; ++i)
{
long long part = Y[i];
result |= part << 8*i;
}
std::cout << std::hex << result << std::endl;
return 0;
}
int main()
{
char Y[6];
Y[0]=0x01;
Y[1]=0x02;
Y[2]=0x03;
Y[3]=0x04;
Y[4]=0x05;
Y[5]=0x06;
int i = 5;
LONGLONG llMerge = 0;
while(i >= 0)
{
llMerge = llMerge << 0x8 | Y[i];
i--;
}
return 0;
}
//转成一个LONGLONG类型