为什么"echo strcmp('60','100');" 在PHP输出5?

Rup*_*ert 12 php strcmp

关于这个函数的PHP文档有点稀疏,我已经读过这个函数比较ASCII值所以......

echo strcmp('hello', 'hello');
//outputs 0 as expected - strings are equal.
echo '<hr />';

echo strcmp('Hello', 'hello');
//outputs -32, a negative number is expected as 
//uppercase H has a lower ASCII value than lowercase h.
echo '<hr />';

echo strcmp('60', '100');
//outputs 5.
Run Code Online (Sandbox Code Playgroud)

最后一个例子令我感到困惑.我不明白为什么输出正数.

  • ASCII值0 = 48
  • ASCII值1 = 49
  • ASCII值6 = 54

  • 总ASCII值'60'=(54 + 48)= 102

  • 总ASCII值'100'=(49 + 48 + 48)= 145

strcmp()函数表示'60'比'100'"更大",即使看起来ASCII值字符串长度'100'大于'60'

有谁能解释为什么?

谢谢

wal*_*lyk 13

strcmp() 返回字符串之间第一个不匹配字符的差异.

6- 1是5.

当你看它时,你可能没有看到字符或数字 - 只是数字

  • 请注意,这不是保证行为 - 唯一保证的是这些输入参数的值将大于零. (6认同)
  • @SimonRichter:同意不保证.但它*是*传统的.我在1978年写的一些代码依赖于这种计算返回值*的方法仍然有效*! (2认同)

Mad*_*iha 8

因为strcmp()它找到的第一个差异停止.因此,'1'的ASCII值与'6'的ASCII值之间的差异


dec*_*eze 5

6比5"大".这是词汇比较.第一个字符是不同的,这是比较停止的地方.