JAVA字符串与二进制
⑴ java有什么api可以将字符串直接转换成相应二进制数
public class Test01 {
public static void main(String[] args) {
//比如我现在要转这个字符串
String str = "Hello World";
//先把他变为字符数组
char[] chs = str.toCharArray();
//然后通过integer中的toBinaryString方法来一个一个转
for (int i = 0; i < chs.length; i++) {
System.out.print(Integer.toBinaryString(chs[i]));
}
}
}
100100
⑵ 在java中怎么把字节数组转换成二进制字符串
可以使用Integer类的toBinaryString方法,例如:
bytea=0x45;
StringbinStr=Integer.toBinaryString(a).
API中toBinaryString的解释:
toBinaryString
public static String toBinaryString(inti)
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
如果参数为负,该无符号整数值为参数加上 232;否则等于该参数。将该值转换为二进制(基数 2)形式的无前导0的 ASCII 数字字符串。如果无符号数的大小为零,则用一个零字符'0'(’u0030’) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。字符'0'('u0030') 和'1'('u0031') 被用作二进制数字。
参数:
i- 要转换为字符串的整数。
返回:
用二进制(基数 2)参数表示的无符号整数值的字符串表示形式。
从以下版本开始:
JDK1.0.2
⑶ java如何把二进制字符串转成整数
java将二进制装换成整数,可以使用Integer类的方法,来进行转换,如下:
Integer.parseInt("80000000",2);
Integer属于int基本类型的包装类,可以实现各个类型的互相转换,还可以输出成string类型,只需要使用toString()方法。
⑷ JAVA获得字符串二进制码的问题 String.getBytes()问题
PHP中的汉字部分是由文件的编码决定的。或者说目前PHP的字符串不支持汉字,把汉字看成字节原封不动的输出。Java的字符串支持汉字,要另外注意编码。比如PHP使用GBK编码的文件和java通讯时,Java的字符串就要str.getBytes("GBK");转成字节后参与编码。
另外要注意PHP的MCrypt库没有预置补齐函数和键的处理函数,
PHP在AES编码前,要写好和Java一致的,对键和数据进行相应的补齐和处理。
比如Java的AES/CBC/PKCS5Padding 方式,PHP中就要手工写一个PKCS7补齐的方法,
才可能和Java通讯。
⑸ java中怎样把二进制数转换成对应的字符串
查API呀 String 里面有方法:构造方法摘要String()
初始化一个新创建的 String 对象,使其表示一个空字符序列。String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。String(byte[] bytes, Charset charset)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。String(byte[] ascii, int hibyte)
已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。String(byte[] bytes, int offset, int length, Charset charset)
通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。String(byte[] ascii, int hibyte, int offset, int count)
已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。String(byte[] bytes, int offset, int length, String charsetName)
通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。String(byte[] bytes, String charsetName)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。String(char[] value)
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。String(char[] value, int offset, int count)
分配一个新的 String,它包含取自字符数组参数一个子数组的字符。String(int[] codePoints, int offset, int count)
分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。String(StringBuffer buffer)
分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。String(StringBuilder builder)
分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
⑹ java二进制的数字与字符串互转
现成的方法,多看api
⑺ java 如何将String转换为2进制流通过Socket发送到服务器,最好附上代码。
public
static
void
main(String[]
args)
{
//
信息
String
msg
=
"abcdefg";
try
{
//
连接到具体的地址跟端口号
Socket
socket
=
new
Socket("www.xxx.com",
8080);
//
获得输出流并写入数据
OutputStream
out
=
socket.getOutputStream();
out.write(msg.getBytes());
out.flush();
out.close();
}
catch
(UnknownHostException
e)
{
e.printStackTrace();
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
⑻ java怎样把字符串转化为二进制形式
importjava.io.UnsupportedEncodingException;
importjava.util.Arrays;
/*
*String(byte[]bytes,StringcharsetName):通过指定的字符集解码字节数组
*byte[]getBytes(StringcharsetName):使用指定的字符集合把字符串编码为字节数组
*
*编码:把看得懂的变成看不懂的
*String--byte[]
*
*解码:把看不懂的变成看得懂的
*byte[]--String
*
*举例:谍战片(发电报,接电报)
*
*码表:小本子
* 字符 数值
*
*要发送一段文字:
* 今天晚上在老地方见
*
* 发送端:今--数值--二进制--发出去
* 接收端:接收--二进制--十进制--数值--字符--今
*
* 今天晚上在老地方见
*
*编码问题简单,只要编码解码的格式是一致的。
*/
publicclassStringDemo{
publicstaticvoidmain(String[]args){
Strings="你好";
//String--byte[]
byte[]bys=s.getBytes();//[-60,-29,-70,-61]
//byte[]bys=s.getBytes("GBK");//[-60,-29,-70,-61]
//byte[]bys=s.getBytes("UTF-8");//[-28,-67,-96,-27,-91,-67]
System.out.println(Arrays.toString(bys));
//byte[]--String
Stringss=newString(bys);//你好
//Stringss=newString(bys,"GBK");//你好
//Stringss=newString(bys,"UTF-8");//???
System.out.println(ss);
}
}
⑼ java 字符串转二进制问题
给个函数好了
public static String fillLeft(char fillChar, long len, String inputStr) {
String resultStr = "";
String cStr = "";
if (inputStr.length() > len)
resultStr = inputStr;
else
for (int i = 0; i < len - inputStr.length(); i++)
cStr = cStr + fillChar;
resultStr = cStr + inputStr;
return resultStr;
}
作用就是左边补指定的字符
你需要的是将
result +=Integer.toBinaryString(strChar[i]);
改为 result +=fillLeft('0',8,Integer.toBinaryString(strChar[i]));
⑽ 算法 Java如何实现把不定长的字符串扩展为128位二进制数
如果这个二进制数比较大的话, 大到只能用数组储存这个二进制数,
当然如果大到转化成10进制int存不下的情况那另当别论
#include<stdio.h>
#include<string.h>
int main()
{
char a[33];
int i, num = 0;
scanf("%s", a);
for(i=strlen(a)-1; i>=0; i--)
{
num*=2;
num+=a[i]-'0';
}
printf("%d\n", num);
return 0;
}
不好意思,没看清楚题目,大数的我也没编出来。
我在网上找到了一个C++的,希望对你有帮助。
//==========================================
//将64个3000位的二进制转化成十进制,性能:120秒内
//------------------------------------------
#include<iostream>
#include<fstream>
#include<sstream>
#include<algorithm>
#include<time.h>
using namespace std;
//------------------------------------------
int main(){
clock_t start=clock(); //统计时间
ifstream in("abc.txt");
for(string s;getline(in,s);){ //读取二进制数
int b[904]={0},t=0; //三千位的二进制数都为1时最大,转换后约为1.2e+903,所以取数组904足够
int a[904]={0}; //数组的每一位放置十进制的一位数,从a[0]到a[903]依次为个位、十位、百位...
a[0]=1; //数组初值全为零,第一位为2的0次方,等于1,所以a[0]附值为1
reverse(s.begin(),s.end()); //倒置字符串s
for(int k=0;k<s.size();k++){ //开始从k=0位读取字符s[k]
if(s[k]=='1'){ //等于'0'时,2的k次方为0
for(int i=t;i<k;i++){ //求2的k次方,每次循环乘2,共乘k-t次 t为保留的上次a[i]累计
for(int j=0;j<904;j++) //每一位都乘2
a[j]=2*a[j];
t=k;
for(j=0;j<904;j++) //检查从a[0]到a[903]每位是不是都是个位数
if(a[j]>=10){ //超过10就要进位
a[j]=a[j]-10; //j位大于10进1
a[j+1]=a[j+1]+1; //下位即j+1位要加1
}
}
for(int j=0;j<904;j++){ //b数组为求和数组,初值为0
b[j]=b[j]+a[j]; //将此次k位上的2的k次方数的大小与b求和
if(b[j]>=10){ b[j]=b[j]-10; b[j+1]=b[j+1]+1;}//大于10进1,下一位加1
}
}
}
int w;
for(int i=903;i>=0;i--) //w为统计此3000位二进制数转化为十进制后的位数
if(b[i]!=0){ w=i;break;} //从最高位开始,遇到非0数结束
for(i=w;i>=0;i--) //输出结果,注意是从高位开始输出
cout<<b[i];
cout<<endl;
cout<<"十进制位数为:"<<w+1<<endl<<endl; //输出转化后的十进制数位数
}
cout<<"耗用时间为:"<<(clock()-start)/CLK_TCK<<endl; //输出耗用时间,64个3000位的测试时间为12秒
}//=======================================
还有一个这个。
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10000
typedef struct{
int len;
char value[MAX_LEN];
} TBigInt, *pBigInt;
void AddBit(pBigInt s,char BitValue){ //加一位, 0或者1。
int i;
for (i=0;i<s->len;i++)
s->value[i]*=2;
s->value[0]+=BitValue;
for (i=0;i<s->len;i++){
s->value[i+1]+=s->value[i]/10;
s->value[i]%=10;
}
if (s->value[s->len]) s->len++;
}
void OutputBigInt(pBigInt s){ //输出大整数类型
int i;
if (s->len==0){
puts("0");
} else {
for (i=s->len-1;i>=0;i--)
putchar(s->value[i]+'0');
putchar('\n');
}
}
int main(){
static char buf[1000000];
static TBigInt BigInt;
while (scanf("%s",buf)!=EOF){
memset(&BigInt,0,sizeof BigInt);
int i;
for (i=0;buf[i];i++)
AddBit(&BigInt,buf[i]=='1'?1:0);
OutputBigInt(&BigInt);
}
return 0;
}