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