如何将一个 int 分成两个字符

Ske*_*ith 5 c java

这是一个遗留系统,所以请不要告诉我我正在尝试做的事情是错误的。必须这样。

我有一个字节数组,其中日期按顺序排列。这很好,直到我想存储 255 以上的值。为此,我需要使用 2 个字节作为 16 位值。

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

一个程序使用 C 语言,另一个程序使用 Java,它们通过字节数组进行通信。

在我看来,这像是很久以前就应该解决的问题,所以我想知道 Java 和 C 库中是否有执行此操作的函数。如果没有,是否有一种简单的方法可以进行转换?

Rew*_*ind 2

据我所知,你只是在做 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;
Run Code Online (Sandbox Code Playgroud)

然后像平常一样打印higher_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;
Run Code Online (Sandbox Code Playgroud)

]

所以使用二元运算符就变成:

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;
Run Code Online (Sandbox Code Playgroud)

和恢复

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;
Run Code Online (Sandbox Code Playgroud)

  • 虽然`/ 256`和`% 256`是正确的,但是当用位操作编写时,代码会更明显,即分别为`&gt;&gt; 8`和`&amp; 0xFF`。 (2认同)