Java tutorial
//package com.java2s; /* * Copyright 2012 Peter Karich info@jetsli.de * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class Main { public static long fromBitString2Long(String str) { if (str.length() > 64) { throw new UnsupportedOperationException( "Strings needs to fit into long (8*8 bits) but length was " + str.length()); } byte[] res = fromBitString(str); if (res.length < 8) { byte[] newBytes = new byte[8]; System.arraycopy(res, 0, newBytes, 8 - res.length, res.length); res = newBytes; } return toLong(res); } public static byte[] fromBitString(String str) { // no need for performance or memory tuning ... int strLen = str.length(); int bLen = str.length() / 8; if (strLen % 8 != 0) { bLen++; } byte[] bytes = new byte[bLen]; int charI = 0; for (int b = 0; b < bLen; b++) { byte res = 0; for (int i = 0; i < 8; i++) { res <<= 1; if (charI < strLen && str.charAt(charI) != '0') { res |= 1; } charI++; } bytes[b] = res; } return bytes; } public static long toLong(byte[] b) { return toLong(b, 0); } public static long toLong(byte[] b, int offset) { return ((long) toInt(b, offset) << 32) | (toInt(b, offset + 4) & 0xFFFFFFFFL); } public static int toInt(byte[] b) { return toInt(b, 0); } public static int toInt(byte[] b, int offset) { return (b[offset] & 0xFF) << 24 | (b[++offset] & 0xFF) << 16 | (b[++offset] & 0xFF) << 8 | (b[++offset] & 0xFF); } }