在 java 中查找字符串 (char) 的 7 位 1 的补码的 ASCII 值
find ASCII value of, 7 digit 1’s complement of a string(char) in java
我必须在 java 中找到字符串 (char) 的 7 位 1 的补码的 ASCII 值。
提前致谢。
好的,让我们从基础开始吧。
您只需要字节的 7 位补码。因此,如果仅给定 7 个字节:
0x3E = 0 011 1110
0x41 = 0 100 0001
0x41确实是0x3E的补码
现在,您首先遇到了一个问题,这个问题是在 Java 中,由于字符编码的原因,char
不能与 byte
互换。
但是,由于您的字符范围仅限于 ASCII,因此您可以使用 US-ASCII 作为编码。所以,第一步是:
final Charset ascii = StandardCharsets.US_ASCII;
final byte[] bytes = theInput.getBytes(ascii);
final byte[] transformedBytes = new byte[bytes.length];
byte original, transformed;
for (int index = 0; index < bytes.length; index++) {
original = bytes[index];
transformed = transformByte(original);
transformedBytes[index] = transformed;
}
return new String(transformedBytes, ascii);
现在,需要编写transformedByte()
方法。
一个补码只是简单地包含一个位,而不是所有字节,但这里你想将其限制为 7 个字节;因此,解决方案是先正常进行否定,然后用0x7f屏蔽,即0111 1111
;这是因为 none 的字节值设置了最高位:
private static void transformByte(final byte original)
{
return ~original & 0x7f;
}
这个可以直接代入原来的方法,甚至不值得一个单独的方法;)
我必须在 java 中找到字符串 (char) 的 7 位 1 的补码的 ASCII 值。
提前致谢。
好的,让我们从基础开始吧。
您只需要字节的 7 位补码。因此,如果仅给定 7 个字节:
0x3E = 0 011 1110
0x41 = 0 100 0001
0x41确实是0x3E的补码
现在,您首先遇到了一个问题,这个问题是在 Java 中,由于字符编码的原因,char
不能与 byte
互换。
但是,由于您的字符范围仅限于 ASCII,因此您可以使用 US-ASCII 作为编码。所以,第一步是:
final Charset ascii = StandardCharsets.US_ASCII;
final byte[] bytes = theInput.getBytes(ascii);
final byte[] transformedBytes = new byte[bytes.length];
byte original, transformed;
for (int index = 0; index < bytes.length; index++) {
original = bytes[index];
transformed = transformByte(original);
transformedBytes[index] = transformed;
}
return new String(transformedBytes, ascii);
现在,需要编写transformedByte()
方法。
一个补码只是简单地包含一个位,而不是所有字节,但这里你想将其限制为 7 个字节;因此,解决方案是先正常进行否定,然后用0x7f屏蔽,即0111 1111
;这是因为 none 的字节值设置了最高位:
private static void transformByte(final byte original)
{
return ~original & 0x7f;
}
这个可以直接代入原来的方法,甚至不值得一个单独的方法;)