你仔细看看吧
getline + getline + ... 把内容读进缓冲区 跟一次性把所有内容读进缓冲区是一样的么。
getline 是不是去掉每行的\r\n啊?
函数一般不都是传入一个String,然后给你算个校验和么就这么用呗~~
【 在 mistlike (虚无飘渺) 的大作中提到: 】
: 看到有crc32相关的头文件但是发现不同的系统上面还是有差异的 编译有的时候都没法编译
: 能不能给出一个使用的例子啊 都要用到那些函数或者库
: 好像没找到库函数 只有crc32.c之类的文件
这篇文章主要介绍了php的crc32函数使用时需要注意的问题(不然就是坑),需要的朋友可以参考下
前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下:
复制代码
代码如下:
function
_getHash($username)
{
$hash
=
crc32($username)
%
512
return
$hash
}
function
_getTable($username)
{
$hash
=
self::_getHash($username)
return
'user_'
.
$hash
}
首先在本地32位window机上生成好数据并插入对应的表中。但是再把程序和数据传到服务器上(64为linux),发现查不到数据。经过排查后发现,原来服务器上crc32的结果和本地不同。再查php手册才知,crc32的接口原来和机器有关。
php手册的描述:
复制代码
代码如下:
Because
PHP's
integer
type
is
signed
many
crc32
checksums
will
result
in
negative
integers
on
32bit
platforms.
On
64bit
installations
all
crc32()
results
will
be
positive
integers
though.
crc32返回的结果在32位机上会产生溢出,所以结果可能为负数。而在64位机上不会溢出,所以总是正值。
CRC算法是按字长位数bit进行计算的。
crc32函数会按照php中的两个常量参考计算
PHP_INT_SIZE,PHP_INT_MAX
这两个常量的定义:
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32
位有符号)。PHP
不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自
PHP
4.4.0
和
PHP
5.0.5后,最大值可以用常量PHP_INT_MAX来表示。
输出下32位中PHP_INT_SIZE:4,PHP_INT_MAX:2147483647
输出下64位中PHP_INT_SIZE:8,PHP_INT_MAX:9223372036854775807
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)