2013-02-27 146 views
0

这是一项家庭作业,我无法包裹头部。我必须手动完成,所以我不能使用“getBytes()”。此外,我必须首先转换为十进制格式,然后将十进制转换为ASCII(例如,以十进制格式{0,1,1,0,0,0,1,0} = 98,这是'b')。 。我已经将二进制代码排列成一个数组,并希望使用for循环遍历数组的位置。但是,我不确定我是否为for循环使用了正确的参数,并且不确定如何将代码划分为“8”的位。另一件事,如何将十进制值转换为ASCII?我应该列出所有可能的字母,我知道我会得到,然后使用if-else循环引用它们?或者我可以只将小数转换为char?这是到目前为止我的代码......(这是一个有点乱,抱歉)如何在JAVA中将二进制值转换为ASCII?

class Decoder 
{ 
    public void findCode(Picture stegoObj) 
    { 
    Pixel pixTar = new Pixel(stegoObj,0,0); 
    Pixel [] pixelArray = stegoObj.getPixels(); 
    int blueVal = 0; 

    for(int length = 0; length < pixelArray.length; length++) 
    { 
     blueVal = pixTar.getBlue();     
    } 
    System.out.println(blueVal); 
    stegoObj.explore(); 
    } 

    public void decode(int [] binary) 
    { 
     int binaryLen = binary.length; 
     int totVal = 0; 
     int newVal = 0; 
     int bitVal = 0; 

     for(int x = binaryLen - 1; x >= 0; x--) 
     { 
      bitVal = binary[x]; 
      int exp = x - (binaryLen - 1); 
      totVal += (pow(bitVal, exp)); 
     } 

     System.out.println(totVal); 
    } 
} 
public class DecodeImage 
{ 
    public static void main(String[] args) 
    { 
     Picture stegoObj = new Picture("SecretMessage.bmp"); 
     Decoder deco = new Decoder(); 
     int[] binArray =  {0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0}; 
     //int[] binArray = {0,1,1,0,0,0,1,0}; 
     //deco.findCode(stegoObj); 
     deco.decode(binArray);   
    } 
} 

编辑:

好了,所以我想通了很多本,类解码器下,在解码块,在for循环:

for(int x = binaryLen - 1; x >= 0; x--) 
{ 
    bitVal = binary[x]; 
    preVal = bitVal * base; 
    totVal += preVal; 
    base = base * 2; 
} 

回答

0

您对decode有正确的想法。我不明白为什么你的代码不能工作,尽管我没有在任何地方看到pow的实现。

十进制转换为ASCII很简单,只需将值转换为字符:

int v = ...;  // decimal value 
char c = (char)v; // ascii value 
+0

对不起,不知道如何回复。我将编辑我的帖子... – Hotsaucejalapeno 2013-02-27 03:18:30

+0

谢谢!我无法弄清楚这一点,并为我节省了大量代码。 – Hotsaucejalapeno 2013-02-27 18:03:08

0
int[] bValue = {1,0,0,0,1,0,1}; 

    int iValue = 0; 
    // convert binary to decimal 
    for (int i = 0, pow = bValue.length - 1 ; i < bValue.length ; i++, pow--) 
     iValue += bValue[i]*Math.pow(2, pow); 

    // gets the value as a char 
    char cValue = (char)iValue; 

    System.out.println("Int value: "+iValue +", Char value : "+cValue); 

如果您需要整个ASCII表,你可以将值放入一个地图,其中的关键是整数值,并且该值是相应的ASCII条目。

相关问题