Java语言 和 c语言如何将一个LONG数值按压缩BCD码形式存放一个数组中,具体问题如下:
将 long 型 变量 NUM 的数值 按压缩BCD码的 形式存入 数组的 函数 比如 NUM=1234567890 (注意 此处是10进制,不是 16进制的 0x1234567890) 存入数组 A[9] 后 A[0]=0X12 (注意是16进制的0X12 ,不是10进制的12 其余均是) A[1]=0X34 A[2]=0X56 A[3]=0X78 A[4]=0X90
仅供参考:
#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();
}
【以下回答由 GPT 生成】
解决方案
C语言解决方案:
C语言可以使用位运算操作来实现将一个长整型变量的数值按压缩BCD码的形式存入一个数组中。
A
,大小为长整型数值的长度的两倍(每个十进制数对应两个BCD码)。for
循环将长整型变量NUM
的每个十进制数转换为BCD码,存入数组A
的相应位置。下面是相应的C语言代码:
#include <stdio.h>
void compressBCD(long num, unsigned char *arr, int size) {
for (int i = size - 1; i >= 0; i--) {
arr[i] = ((unsigned char) num % 10) + 0x30;
num /= 10;
arr[i] |= (((unsigned char) num % 10) << 4) + 0x30;
num /= 10;
}
}
int main() {
long num = 1234567890;
int size = sizeof(long) * 2;
unsigned char arr[size];
compressBCD(num, arr, size);
for (int i = 0; i < size; i++) {
printf("A[%d] = 0x%.2x\n", i, arr[i]);
}
return 0;
}
Java解决方案:
Java语言中可以使用位运算操作和字符串操作来实现将一个长整型变量的数值按压缩BCD码的形式存入一个数组中。
A
,大小为长整型数值的长度的两倍(每个十进制数对应两个BCD码)。NUM
转换为字符串形式。for
循环将字符串中的每个字符转换为十进制数对应的BCD码,并存入数组A
的相应位置。下面是相应的Java代码:
public class Main {
public static void main(String[] args) {
long num = 1234567890;
int size = Long.SIZE * 2;
byte[] arr = new byte[size];
compressBCD(num, arr, size);
for (int i = 0; i < size; i++) {
System.out.printf("A[%d] = 0x%02x\n", i, arr[i]);
}
}
public static void compressBCD(long num, byte[] arr, int size) {
String numStr = Long.toString(num);
int strLen = numStr.length();
int arrIdx = size - 1;
for (int i = strLen - 1; i >= 0; i -= 2) {
byte highBCD = (byte) (Character.getNumericValue(numStr.charAt(i - 1)) << 4);
byte lowBCD = (byte) Character.getNumericValue(numStr.charAt(i));
arr[arrIdx--] = (byte) (highBCD | lowBCD);
}
if (strLen % 2 != 0) {
arr[arrIdx--] = (byte) (Character.getNumericValue(numStr.charAt(0)) << 4);
}
}
}
以上两种解决方案都能够将长整型数值按照压缩BCD码的形式存储到一个数组中,并给出了示例代码,可根据需求自行使用。
【相关推荐】