如果我有两个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