如果我有兩個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. Exceldna等效於Java
- 3. Yacc等效於Java
- 4. BufferedReader.readNext()用於Java中ObjectInputStream的等效
- 5. 等效於來自PHP中的Java
- 6. Python中的「事件」等效於Java?
- 7. Swift等效於Java中的Enum.ordinal()
- 8. C#Uri.EscapeDatastring()等效於Java
- 9. Java SHA1等效於C#
- 10. jdeps等效於Java 7
- 11. opencv cvCaptureFromFile(「url」)等效於java?
- 12. 等效於JavaScript的Java的的getBytes的
- 13. 等效於Java的JFileChooser.FILES_AND_DIRECTORIES的WinForms
- 14. Java中的freopen的等效
- 15. 用於Java Streams API的Javascript等效
- 16. 等效於Java ScheduledExecutorService的C語言庫?
- 17. 用於Java的GNU Readline等效項
- 18. 用於Android的AJAX等效Java
- 19. 甲骨文等效於java的System.nanoTime()
- 20. JavaScript等效於Java的URLEncoder.encode(「String」,「UTF-8」)
- 21. COM中的bindtomoniker java等效
- 22. 等效於.NET中的NSOperationQueue
- 23. 等效於R中的matlab'ans'
- 24. 等效於javascript中的browserField.displayContent()
- 25. 等效於Python中的createDataPartition
- 26. 等效於WPF中的TransparencyKey
- 27. 等效於Sybase中的sp_executesql
- 28. 等效於OpenSSL的
- 29. Worklow Foundation(.NET)等效於Python,Java,C++嗎?
- 30. Java RMI InitialContext:等效於LocateRegistry.createRegistry(int)?
我很好奇的如果有人將空終止的情況下,他們自己在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