C语言中:[code]
#include <stdio.h>
#include <stdlib.h>int main()
{
    unsigned char ss[5] = "1234";    ss[0] = 0x31;
    ss[1] = 0x32;
    ss[2] = 0x33;
    ss[3] = 0x34;
    fprintf(stderr, "%d|%x%x%x%x", atoi(ss), ss[0], ss[1], ss[2], ss[3]);
}
[/code]atoi的结果是1234java 中:
String str = "31323334";
System.out.println(Integer.parseInt(str, 16));
结果是:825373492这是为什么呢?

解决方案 »

  1.   

    那如何将31323334四字节转成int呢?在java里?网上有人用: public static int bytesToInt(byte[] b) {
    int temp = 0;
    int res = 0;
    for (int i = 0; i < 4; i++) {
    res <<= 8;
    temp = b[i]&0x000000FF;
    res |= temp;
    }
    return res;
    } 但这个方法我试了也不行。就是调用bytesToInt(str.getBytes())这样
      

  2.   

    哦,不是,是先将16进制转成二进制数据,如: public static byte[] hexStringToBytes(String hex) {
    int len = (hex.length() / 2);
    byte[] result = new byte[len];
    char[] achar = hex.toCharArray();
    for (int i = 0; i < len; i++) {
    int pos = i * 2;
    result[i] = (byte)(toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
    }
    return result;
    }bytesToInt(hexStringToBytes(str))
      

  3.   

    C语言中:int main()
    {
        unsigned char ss[5] = "1234";    ss[0] = 0x31;
        ss[1] = 0x32;
        ss[2] = 0x33;
        ss[3] = 0x34;
        fprintf(stderr, "%d|%x%x%x%x", atoi(ss), ss[0], ss[1], ss[2], ss[3]);
    }前面漏掉了
      

  4.   

    楼上的,请教一下,这不是四个字节吗?能不能帮帮忙解释解释?我只想把C语言中的这个四字段用JAVA能计算出来是1234就行。是不是就是说必需得一个字节一个字节来翻译?
      

  5.   

    搞着好好的c语言干嘛来搞java
      

  6.   

    不知道LZ想问什么?
    String s = "1234";
    Integer i = Integer.valueOf(s);
    char[] c = s.toCharArray();
    System.out.printf("%d|%x%x%x%x", i, (int)c[0], (int)c[1], (int)c[2], (int)c[3]);
      

  7.   

    好像明白LZ的意思了
    lz你在C里面 char[] ss = "31323334";
    然后调用 atoi(ss),能出来1234 ?String s = "31323334";
    int r = 0;
    for (int i=0; i<s.length(); i+=2) {
        System.out.println(s.substring(i,i+2));
        r = r*10 + Integer.valueOf(s.substring(i,i+2), 16).intValue() - (int)'0';
    }
    System.out.println(r);