在 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;
}

这个可以直接代入原来的方法,甚至不值得一个单独的方法;)