2

Byte.MAX_VALUEPython には、最大バイトを表すJava と同等のものがありますか? 私はpythonsysモジュールを見ましたが、なんとか見つけることができsys.maxintました。のようなものはありsys.maxbyteますか?

アップデート:

私の場合、Hbase Rowkey スキャンを実行しています。私の行キーは rk1_rk2 のように見えます。正確な rk2 を知らなくても rk1 のすべての結果をスキャンするには、私の Java コードは次のようになります。

byte[] startRowBytes = "rk1".getBytes(); 
byte[] endRowBytes = ("rk1" + (char) Byte.MAX_VALUE).getBytes(); 

HbaseScanQuery query = new   HbaseScanQuery(tableName, colFamily);
query.setStartRow(startRowBytes).setStopRow(endRowBytes);

私は Byte.MAX_VALUE 部分の python の同等性を解決しようとしています。

4

2 に答える 2

3

自分で値を定義する必要があると思います。バイトには 2^8 = 256 の一意の状態があるため、表現できる最大の整数は 255 です。ただし、Java のバイト型は符号付きバイトであるため、状態の半分は正 (および 0) 用に予約され、残りの半分は使用されます。ネガ用。したがって、Java の Byte.MAX_VALUE に相当する値は 127 であり、Java の Byte.MIN_VALUE に相当する値は -128 です。

Python バイトは符号なしであるため、Java の Byte.MIN_VALUE に相当する値は 128 であり、これは 2 の補数表記 (符号付き整数を表すための事実上の標準) での -128 の表現であり、それを指摘してくれた Ignacio Vazquez-Abrams のおかげです。

私はしばらくPythonを扱っていませんが、あなたが望むのは ("rk1"+chr(127)) だと思います

于 2013-01-15T14:23:17.883 に答える
1

あなたのアップデートを考えると、さらに良い答えがあります:最大バイト値が何であるかについて心配しないでください。HBaseのドキュメントによると、メソッドsetStartRowsetStopRowメソッドはPythonのスライスと同じように機能します。つまり、開始は包括的ですが、停止は排他的です。つまり、endRowBytes単純にである必要があります'rk2'

また、ドキュメントには、ゼロバイトを追加することで停止行を包括的にすることができると記載されているため、別の方法は'rk1' + chr(0)(または、'rk1\0'または'rk1\x00'、どちらか最も明確な方)です。実際、リンクされたドキュメントでHBaseスキャンを説明するために使用された例は、まさにユースケースを示しています。

于 2013-01-15T15:57:19.243 に答える