0

最近、32 ビット Java の tomcat5 のアプリケーションを 64 ビット Java の tomcat6 に移行しました。

アプリケーションには、各サーバーで異なる値を返すテキスト CRC 計算があります。例: "Hipoplasia del seno frontal.Resto de senos faciales con desarrollo y neumatización Habituales.No se observan legendes óseas.Atentamente, " は、32 ビット jvm では 439231721 を返し、64 ビット jvm では 2756208468 を返します。

また、32ビットのjv​​m tomcat6で試してみると、439231721が返されます

以下は、crc 計算のコードです。

public static long doChecksum(String text) {

    try{

    //Convert string to bytes
    byte bytes[] = text.getBytes();
    Checksum checksum = new CRC32();
     // void update(bytes[] b, int start, int length)
    checksum.update(bytes,0,bytes.length);

    long lngChecksum = checksum.getValue();
            System.out.println(text + " : " + lngChecksum);
            return lngChecksum;
      } catch (Exception e) {
        return -1;
      }
}

ありがとう!

4

1 に答える 1

4

String.getBytes()システムのデフォルトの文字エンコーディングを使用して文字をバイトに変換することに注意してください。システムのデフォルトの文字エンコーディングが異なる場合、取得するバイト配列が異なり、チェックサムが異なります。

一貫した結果を得るために使用する文字エンコードを指定します。

byte[] bytes = text.getBytes("UTF-8");
于 2013-04-03T18:19:29.183 に答える