gpt4 book ai didi

mysql - 如何将这样的c代码转换为mysql存储过程

转载 作者:行者123 更新时间:2023-11-30 23:37:33 25 4
gpt4 key购买 nike

C 代码:

unsigned int HashValue(const char *str)
{
const char *p = str;
unsigned int hashValue = 0;
while( *p != '\0' )
{
hashValue += *(unsigned char*)p;
++p;
}
return hashValue;
}

我的答案:

DELIMITER $$
CREATE
PROCEDURE `test`.`HashValue`(IN str CHAR(32))
BEGIN
SET @size = LENGTH(str);
SET @pos = 1;
SET @hashValue = 0;
WHILE @pos<@size+1 DO
SET @nCh = SUBSTRING(str,@pos,1);
SET @hashValue = @hashValue + ASCII(@nCh);
SET @pos = @pos + 1;
END WHILE;
SELECT @hashValue;
END$$
DELIMITER ;

但是:

set @str;
call HashValue(@str);

虽然@str是英文没问题,但换成其他宽字节语言(就像中文)就不行了;

我知道问题出在函数 SUBSTRING() 上,第二个参数没有稳定地增加一个字节。

备注:mysql是utf_8编码

最佳答案

我已经设法解决了这个问题:

DELIMITER $$

CREATE
PROCEDURE `test`.`HashValue`(IN str CHAR(32))
BEGIN

SET @pos = 1;
SET @hashValue = 0;
SET @szHex = HEX(str);
SET @size = LENGTH(@szHex);
WHILE @pos<@size+1 DO
SET @cCh = SUBSTRING(@szHex,@pos,2);
SET @nCh =CAST(ASCII(UNHEX(@cCh)) AS UNSIGNED);
SET @hashValue = @hashValue + @nCh;
SET @pos = @pos + 2;
END WHILE;

SELECT @hashValue;
END$$

DELIMITER ;

只需使用HEXUNHEX

关于mysql - 如何将这样的c代码转换为mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com