如何将int分成两个字符

时间:2014-12-19 17:08:17

标签: java c

这是一个遗留系统所以请不要告诉我我想要做的是错误的。必须是这样的。

我有一个字节数组,其中日期以顺序方式放置。这是好的,直到我想存储一个高于255的值。为此,我需要使用2个字节作为16位值。

所以我需要将一个int转换为两个字符,然后将两个字符转换回一个int。

一个程序在C中,另一个在Java中,它们通过字节数组进行通信。

在我看来,这个问题应该在很久以前就已经解决了,所以我想知道在Java和C库中是否有这样做的功能。如果没有,是否有一种简单的转换方式?

3 个答案:

答案 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);