这是一个遗留系统所以请不要告诉我我想要做的是错误的。必须是这样的。
我有一个字节数组,其中日期以顺序方式放置。这是好的,直到我想存储一个高于255的值。为此,我需要使用2个字节作为16位值。
所以我需要将一个int转换为两个字符,然后将两个字符转换回一个int。
一个程序在C中,另一个在Java中,它们通过字节数组进行通信。
在我看来,这个问题应该在很久以前就已经解决了,所以我想知道在Java和C库中是否有这样做的功能。如果没有,是否有一种简单的转换方式?
答案 0 :(得分:1)
您也可以使用BigInteger
。
byte[] bytes = BigInteger.valueOf(x).toByteArray();
int y = new BigInteger(bytes).intValue();
答案 1 :(得分:0)
据我所知,你刚刚做了256个数学基础。
我没有对c进行一段时间的编程,所以无视任何旧的术语;
int original_number = 300; // A number over 255
char higher_char, lower_char; // the 2 numbers/chars you are trying to get
higher_char = original_number / 256;
lower_char = original_number % 256;
然后正常打印high_char和lower_char。
[修改
转回来。
char higher_char, lower_char; // The two chars you have in order
int number_to_restore; // The original number you are trying to get back to
number_to_restore = higher_char * 256 + lower_char;
因此使用二元运算符会变成:
int mask = 0xFF;
int original_number = 300; // A number over 255
char higher_char, lower_char; // the 2 numbers/chars you are trying to get
higher_char = (original_number >> 8) & mask;
lower_char = original_number & mask;
和恢复
char higher_char, lower_char; // The two chars you have in order
int number_to_restore; // The original number you are trying to get back to
number_to_restore = (higher_char << 8) | lower_char;
答案 2 :(得分:-1)
这就是我在C
中的表现uint16_t value;
uint8_t chars[2];
value = 280;
/* to bytes array */
chars[0] = value & 0xFF;
chars[1] = (value >> 8) & 0xFF;
/* back */
value = chars[0] | (chars[1] << 8);