这是一个遗留系统,所以请不要告诉我我正在尝试做的事情是错误的。必须这样。
我有一个字节数组,其中日期按顺序排列。这很好,直到我想存储 255 以上的值。为此,我需要使用 2 个字节作为 16 位值。
所以我需要将一个 int 转换为两个字符,然后将两个字符转换回一个 int。
一个程序使用 C 语言,另一个程序使用 Java,它们通过字节数组进行通信。
在我看来,这像是很久以前就应该解决的问题,所以我想知道 Java 和 C 库中是否有执行此操作的函数。如果没有,是否有一种简单的方法可以进行转换?
据我所知,你只是在做 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)