Java中从字符串到ASCII再到二进制再到ASCII再到字符串
我有一个古怪的问题(我希望还没有被问到和回答)。首先,我将告诉您我尝试做什么的顺序以及我是如何做的,然后告诉您我在哪里遇到了问题:Java中从字符串到ASCII再到二进制再到ASCII再到字符串,java,binary,ascii,Java,Binary,Ascii,我有一个古怪的问题(我希望还没有被问到和回答)。首先,我将告诉您我尝试做什么的顺序以及我是如何做的,然后告诉您我在哪里遇到了问题: 将字符串转换为ASCII数字 将这些ASCII数字转换为二进制并存储在字符串中 将这些二进制数转换回ASCII数 将ASCII数字转换回普通字符 以下是我迄今为止编写的方法: public static String strToBinary(String inputString){ int[] ASCIIHolder = new int[inputStri
public static String strToBinary(String inputString){
int[] ASCIIHolder = new int[inputString.length()];
//Storing ASCII representation of characters in array of ints
for(int index = 0; index < inputString.length(); index++){
ASCIIHolder[index] = (int)inputString.charAt(index);
}
StringBuffer binaryStringBuffer = new StringBuffer();
/* Now appending values of ASCIIHolder to binaryStringBuffer using
* Integer.toBinaryString in a for loop. Should not get an out of bounds
* exception because more than 1 element will be added to StringBuffer
* each iteration.
*/
for(int index =0;index <inputString.length();index ++){
binaryStringBuffer.append(Integer.toBinaryString
(ASCIIHolder[index]));
}
String binaryToBeReturned = binaryStringBuffer.toString();
binaryToBeReturned.replace(" ", "");
return binaryToBeReturned;
}
public static String binaryToString(String binaryString){
int charCode = Integer.parseInt(binaryString, 2);
String returnString = new Character((char)charCode).toString();
return returnString;
}
publicstaticstringstrtobinary(stringinputstring){
int[]ascihihold=new int[inputString.length()];
//在整数数组中存储字符的ASCII表示
对于(int index=0;index
- 您只是连接二进制字符串,没有分隔符。因此,如果您有“1100”和“0011”,您将得到“11000011”,这与您有“1”和“1000011”的结果相同
- 您正在调用
String.replace
并忽略返回结果。这种情况并不重要,因为您正在替换空格,而且无论如何都不会有空格……但应该有
当然,您不必使用分隔符,但如果不使用分隔符,则需要确保包含每个UTF-16代码点的所有16位。(或者验证您的字符串是否仅使用有限的字符范围,并降到适当的位数,例如,ISO-8859-1为8位,ASCII为7位。)
(我想知道这一切的意义是什么。家庭作业?我看不出这在现实生活中有用。)所以我使用了OP的代码,并做了一些修改,它对我来说非常有效。
我会把它贴在这里给未来的人看。我认为OP不再需要它了,因为他可能是在过去两年里弄明白的
public class Convert
{
public String strToBinary(String inputString){
int[] ASCIIHolder = new int[inputString.length()];
//Storing ASCII representation of characters in array of ints
for(int index = 0; index < inputString.length(); index++){
ASCIIHolder[index] = (int)inputString.charAt(index);
}
StringBuffer binaryStringBuffer = new StringBuffer();
/* Now appending values of ASCIIHolder to binaryStringBuffer using
* Integer.toBinaryString in a for loop. Should not get an out of bounds
* exception because more than 1 element will be added to StringBuffer
* each iteration.
*/
for(int index =0;index <inputString.length();index ++){
binaryStringBuffer.append(Integer.toBinaryString
(ASCIIHolder[index]));
}
String binaryToBeReturned = binaryStringBuffer.toString();
binaryToBeReturned.replace(" ", "");
return binaryToBeReturned;
}
public String binaryToString(String binaryString){
String returnString = "";
int charCode;
for(int i = 0; i < binaryString.length(); i+=7)
{
charCode = Integer.parseInt(binaryString.substring(i, i+7), 2);
String returnChar = new Character((char)charCode).toString();
returnString += returnChar;
}
return returnString;
}
}
公共类转换
{
公共字符串strToBinary(字符串inputString){
int[]ascihihold=new int[inputString.length()];
//在整数数组中存储字符的ASCII表示
对于(int index=0;index 对于(int index=0;通过“ASCII数字”索引)您是指“UTF-16代码单元”对吗?您需要确保每个“ASCII字符”*在二进制缓冲区中,使用7位;也就是说,使用填充。然后您应该需要沿着这些边界将其拆分,并将每个段分别解码为一个字符。*您确实意识到Javachar
是一个UTF-16码点……7位ASCII字符编码是一个子集。请确保您完全理解您正在做的事情。我不确定您是否会这样做nest——我几个月前才开始使用Java,现在还在学习细节。所谓“ASCII数字”,我指的是从ASCIIHolder[index]=(int)inputString.charAt(index)中给出的任何值@veer,我不知道。我会把它们都读一遍,然后试着重写代码。@veer我的意思是文本为UTF-8。谢谢你的提醒,我现在要回顾我的代码,并尝试解决它。你认为有一个字符串数组(或列表或其他东西)会更好吗其中每个元素都有自己的二进制值?我正在编写一个DES加密程序,在其中转换输入字符(和密钥)将字符串转换为二进制,然后运行加密算法。@Decave:为什么要将其作为1和0的字符串?通常,当人们谈论将字符串转换为二进制进行加密时,需要调用string.getBytes(encoding)
。这根本不是一回事。原始加密算法的输入应该是byte[]
,而不是字符串。
。这不只是将其转换为字节吗?我需要文本的实际位。再次,如果这真的是nooby,我很抱歉,但我已经很久没有编程了——我这样做是为了更好。@Decave:但是为什么需要这些位作为文本本身?这是一个非常奇怪的要求。除非你要知道,你故意试图编写一种奇怪的加密方法,但你却忽略了它的工作原理…@Decave:我实际上并不依赖堆栈溢出。虽然有时我会快速响应,但有时我不会。但你真的不应该将二进制数据作为文本处理。你应该只使用字节数组,而不使用Byte.parseByte
-只需将输入文本直接转换为字节数组。您不需要遍历“100011101”等形式的字符串。