Linux 下使用zlib库的crc32函数问题

Linux 下使用zlib库的crc32函数问题,第1张

不知道crc32这个函数还可以接力着用,

你仔细看看吧

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7640222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存