BinaryStringConverteUtil: java 字符串与二进制相互转换
程序员文章站
2024-03-18 14:32:46
...
最近在学习redis 的bitmap相关命令时, 用到了字符串和二进制的转换。于是用java 写了一个二进制与字符串相互转换的一个工具类
方法签名 | 方法描述 |
---|---|
public static String toBinaryString(String str) | 将普通字符串转换为二进制字符串 |
public static String toString(String binaryStr) | 将二进制字符串转换为普通字符串 |
public static int countBitOne(String binaryStr) | 统计二进制字符串中的1的数量 |
1. 转换工具类源码
/**
* 二进制字符串转换工具类
* @Auth zongf
* @Date 2019-05-07
*/
public class BinaryStringConverteUtil {
private static final String BIN_SEPARATOR = " ";
/**
* 字符串转换为二进制字符串
* @param str 普通字符串
* @return String 二进制字符串
* @Auth zongf
* @Date 2019-05-07
*/
public static String toBinaryString(String str) {
if (str == null) return null;
StringBuffer sb = new StringBuffer();
byte[] bytes = str.getBytes();
for (byte aByte : bytes) {
sb.append(Integer.toBinaryString(aByte) + BIN_SEPARATOR);
}
return sb.toString();
}
/**
* 二进制字符串转换为普通字符串
* @param binaryStr 二进制字符串
* @return String 普通字符串
* @Auth zongf
* @Date 2019-05-07
*/
public static String toString(String binaryStr) {
if (binaryStr == null) return null;
String[] binArrays = binaryStr.split(BIN_SEPARATOR);
StringBuffer sb = new StringBuffer();
for (String binStr : binArrays) {
char c = binstrToChar(binStr);
sb.append(c);
}
return sb.toString();
}
/**
* 统计二进制字符串中1的个数
* @param binaryStr 二进制字符,如:1101
* @return int
* @Auth zongf
* @Date 2019-05-07
*/
public static int countBitOne(String binaryStr) {
int cnt = 0;
if(binaryStr != null) {
byte[] bytes = binaryStr.getBytes();
for (byte aByte : bytes) {
if (aByte==49) {
cnt++;
}
}
}
return cnt;
}
/**
* 二进制字符转换为int数组
* @param binStr 二进制字符串
* @return int[]
* @Auth zongf
* @Date 2019-05-07
*/
private static int[] binstrToIntArray(String binStr) {
char[] temp=binStr.toCharArray();
int[] result=new int[temp.length];
for(int i=0;i<temp.length;i++) {
result[i]=temp[i]-48;
}
return result;
}
/**
* 将二进制转换成字符
* @param binStr 二进制字符串
* @return char
* @Auth zongf
* @Date 2019-05-07
*/
private static char binstrToChar(String binStr){
int[] temp=binstrToIntArray(binStr);
int sum=0;
for(int i=0; i<temp.length;i++){
sum +=temp[temp.length-1-i]<<i;
}
return (char)sum;
}
}
2. 测试
2.1 测试用例
@Test
public void test1(){
String str = "abc";
// 转换为二进制字符串
String binaryStr = BinaryStringConverteUtil.toBinaryString(str);
// 获取1的数量
int cnt = BinaryStringConverteUtil.countBitOne(binaryStr);
// 反向转换
String newStr = BinaryStringConverteUtil.toString(binaryStr);
System.out.println("源字符串:" + str);
System.out.println("二进制字符串:" + binaryStr);
System.out.println("1位数量:" + BinaryStringConverteUtil.countBitOne(binaryStr));
System.out.println("新字符串:" + newStr);
}
2.2 测试输出
源字符串:abc
二进制字符串:1100001 1100010 1100011
1位数量:10
新字符串:abc
上一篇: 转货币格式和 rgb转hex