public class binaryTest { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] a = { 'a' };
StringBuilder sb = new StringBuilder();
for( char c : a )
{
String cBinaryString = Integer.toBinaryString( (int)c );
sb.append( cBinaryString );
}

System.out.println( sb.toString() );
System.out.println(  sb.toString().length() );

}}请问这里为什么输出1100001(7位)呢?
为什么不是01100001呢?我想要cBinaryString中存储01100001要怎么做到呢?
还有一个疑惑。Java中每个字符不是用2 bytes表示的吗?为什么这里只有一个byte呢?
谢谢大家了

解决方案 »

  1.   

    public static String toHexString(int i)以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 
    如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基数 16)的无前导 0 的 ASCII 数字字符串。如果无符号数的大小值为零,则用一个零字符 '0' (’\u0030’) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。用以下字符作为十六进制数字:  0123456789abcdef
     这些字符的范围是从 '\u0030' 到 '\u0039' 和从 '\u0061' 到 '\u0066'。如果希望得到大写字母,可以在结果上调用 String.toUpperCase() 方法: 
     Integer.toHexString(n).toUpperCase()
      

  2.   

    因为前面的 0 给省略了,就像我们写 100,也没人会去写成 0100 的吧。作为 BMP 的 Unicode 字符(U+0000~U+FFFF 的字符)使用两个字节来表示,CMP 的 Unicode 字符(即 U+10000 及以后的字符)使用四个字节的代理对方式来表示。因此,字符“a”应占用 16 个二进制位的长度,而不是 8 个。public final class Bitwise {    private Bitwise() {
        }    public static void main(String[] args) {        System.out.println(toUnicodeBits('a'));
            System.out.println(toUnicodeBits("abc"));
        }    public static String toUnicodeBits(final char c) {
            char[] bits = new char[ Character.SIZE ];
            copyUnicodeBits(bits, c, 0);
            return new String(bits);
        }    public static String toUnicodeBits(final String str) {
            char[] chs = str.toCharArray();
            char[] bits = new char[ (Character.SIZE + 1) * chs.length - 1 ];
            for ( int i = 0, p = 0; i < chs.length; i++, p += Character.SIZE ) {
                if ( i > 0 ) {
                    bits[p++] = ' ';
                }
                copyUnicodeBits(bits, chs[i], p);
            }
            return new String(bits);
        }    private static void copyUnicodeBits(char[] chs, final char c, int offset) {
            for ( int i = offset + Character.SIZE - 1, k = 0; i >= offset; i-- ) {
                chs[i] = (char)('0' + ((c >>> k++) & 1));
            }
        }
    }