如果我有兩個byte[]
陣列,是否有一個內置函數來比較它們ala C的memcmp()
?等效於Java中的memcmp()?
8
A
回答
5
還有Arrays.equals()。
我不知道,如果在硬件中存在相應的指令的JVM實現是否真正優化了這一點,但我對此表示懷疑。另外,如果我正確記住我的C,strcmp會運行到一個空終止符(使其對C字符串有用),數組版本將比較整個數組,因爲Java程序員很少打擾以null結尾的數組。但是,如果您關心空終止符,您可以輕鬆編寫自己的函數。
0
[滿足Arrays.equals] [1]
[1]:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#equals(byte[],字節[])
2
1
好,Arrays.equals()
是好的,但不能比的子範圍。在這種情況下,還有通過及更高版本.subList()
的路徑,但不適用於像byte[]
這樣的基元。
其實沒有直接memcmp()
等同。這裏是discussion,並且一旦我知道它現在(15年)處於同一狀態。我的選擇可以通過java.nio.ByteBuffer
(wrap()
方法,然後equals()
)來實現。但是它的代碼量有點大。
對於人們充分不懂題目:memcmp()
中,這是非常有效的,並沒有在Java中目前接近它依賴於平臺的方式來實現。就性能而言,任何手動週期都很遙遠,至少是因爲索引範圍檢查。也許有一天來自嵌入式C/C++的人會對這個話題感到滿意:-)。
5
Memcmp返回int,小於,等於或大於零,如果沒有發現s1的前n個字節,分別爲小於,以匹配或比s2的第一n個字節。 Equals返回一個布爾值。這不是同一個功能。另外,memcmp比較字節作爲無符號字符。
我覺得這可能是工作:
public int memcmp(byte b1[], byte b2[], int sz){
for(int i = 0; i < sz; i++){
if(b1[i] != b2[i]){
if(b1[i] >= 0 && b2[i] >= 0)
return b1[i] - b2[i];
if(b1[i] < 0 && b2[i] >= 0)
return 1;
if(b2[i] < 0 && b1[i] >= 0)
return -1;
if(b1[i] < 0 && b2[i] < 0){
byte x1 = (byte) (256 + b1[i]);
byte x2 = (byte) (256 + b2[i]);
return x1 - x2;
}
}
}
return 0;
}
(編輯) 事實上,2的補一部分是沒有必要的:
public static int memcmp(byte b1[], byte b2[], int sz){
for(int i = 0; i < sz; i++){
if(b1[i] != b2[i]){
if((b1[i] >= 0 && b2[i] >= 0)||(b1[i] < 0 && b2[i] < 0))
return b1[i] - b2[i];
if(b1[i] < 0 && b2[i] >= 0)
return 1;
if(b2[i] < 0 && b1[i] >=0)
return -1;
}
}
return 0;
}
相關問題
- 1. 等效於Java的
- 2. 等效於Java的
- 3. Yacc等效於Java
- 4. java等效於nsdate
- 5. #ifdef等效於Java?
- 6. DebugBreak等效於Java?
- 7. arc4random等效於Java?
- 8. doesNotRecognizeSelector等效於Java
- 9. Exceldna等效於Java
- 10. 等效於Java的C++庫?
- 11. Java中的getBytes()等效於C#
- 12. 等效於來自PHP中的Java
- 13. BufferedReader.readNext()用於Java中ObjectInputStream的等效
- 14. Swift等效於Java中的Enum.ordinal()
- 15. Java中的TreeSet等效於C#.net
- 16. Python中的「事件」等效於Java?
- 17. Java SHA1等效於C#
- 18. PHP等效於Java Servlet
- 19. TPL等效於Java/Android
- 20. KeyStorage .Net等效於Java?
- 21. Javascript等效於StringEscapeUtils.escape java
- 22. C++等效於Java Collection.frequency?
- 23. Swift等效於Java .toString()
- 24. jdeps等效於Java 7
- 25. C#Uri.EscapeDatastring()等效於Java
- 26. 等效於JavaScript的Java的的getBytes的
- 27. 等效於Java的JFileChooser.FILES_AND_DIRECTORIES的WinForms
- 28. Java中的freopen的等效
- 29. 用於Java的GNU Readline等效項
- 30. 等效於Java ScheduledExecutorService的C語言庫?
我很好奇的如果有人將空終止的情況下,他們自己在Java中的數組 – 2009-07-07 04:07:26
我從來沒有嘗試過,但我會假設,如果有人在C中調用本地方法並使用緩衝區... – Uri 2009-07-07 04:08:51
strcmp從哪裏來?這個問題是關於memcmp的,我在編輯歷史中也看不到strcmp。 – laalto 2009-07-07 10:50:21