byte[] b= new byte[4];   
        b[0] = 0x39;   
        b[1] = 0x69;   
        b[2] = (byte)0xcc;   
        b[3] = 0x55;   
        int dec_len = bytesToInt(b);   
    public static int bytesToInt(byte[] b) {   
        int temp = 0;   
        int res = 0;   
        for (int i = 0; i < 4; i++) {   
            res <<= 8;   
            temp = b[i]&0xFF;   
            res |= temp;   
        }   
        return res;   
    }   
这样出来的结果是963234901.但在C里用atoi(b)的话是9。难道这个bytesToInt不对? 

解决方案 »

  1.   

    System.out.println(Integer.parseInt("3969cc55", 16));
    结果也是963234901,并不是atoi的结果9
      

  2.   

    atoi的参数不是一个字符指针么,你放一个byte数组进去算哪门子事情atoi的功能应该是
    char *value = "12345";
    int i = atoi(value);
    printf("%d",i);结果应该是12345
      

  3.   

    int main()
    {
        char ss[5] = {0};    ss[0] = 0x39;
        ss[1] = 0x69;
        ss[2] = 0xCC;
        ss[3] = 0x55;
        ss[4] = 0;    printf("%d\n", atoi(ss));
    }这个结果就是9
      

  4.   

    字符指针就是一个char数组啊。看来楼上没怎么用过C?
      

  5.   


    public static String bytes2HexString(byte[] b) {
      String ret = "";
      for (int i = 0; i < b.length; i++) {
       String hex = Integer.toHexString(b[ i ] & 0xFF);
       if (hex.length() == 1) {
        hex = '0' + hex;
       }
       ret += hex.toUpperCase();
      }
      return ret;
    }
      

  6.   

    没错,但字符指针不是byte数组
      

  7.   

    我看了下这几个字符,分别是9i?U,总之后面显示不出来,第一个字符时9,从第二个开始就不知道是什么了,atoi是不是忽略非数字部分呢?
      

  8.   

    跟BE/LE有关?是在Linux下吧,试试颠倒高低位再转换
      

  9.   

    函数说明: atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0‘)才结束转换,并将结果返回。
    返回值:   返回转换后的整型数。
      

  10.   

    Java转化后的结果是对的。
    atoi是将字符串转化为整形,并不是你想的功能。
      

  11.   

    public static int atoi(byte[] bytes) {
    return Integer.parseInt("0"+ new String(bytes).replaceAll("(?s)\\D.*", ""), 10);
    }public static void main(String[] args) {
    System.out.println(
    atoi(new byte[] { 0x39, 0x69, (byte)0xcc, 0x55 })
    );
    }
      

  12.   

    atoi 相当于 Integer.parseInt呵呵