第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么異或運算符會產(chǎn)生“無方法簽名”錯誤消息和/或 bitCount() 需要什么格式才能通過?

為什么異或運算符會產(chǎn)生“無方法簽名”錯誤消息和/或 bitCount() 需要什么格式才能通過?

藍山帝景 2021-08-25 18:08:24
我一直在嘗試將 SQL 函數(shù)轉(zhuǎn)換為 Groovy,以便在 Elastisearch 中使用。但是我對 java 和 groovy 的了解為零,而且我一直在與所有錯誤作斗爭,因為它們出現(xiàn)了。開始工作的第一個問題在這里convertFromBaseToBase解決了。但是現(xiàn)在我遇到了XOR運算符的問題。很可能,在 xor 部分之后會有更多問題,所以我會在前面發(fā)布完整的代碼:public static String convertFromBaseToBase (String str, int fromBase, int toBase){  return (new BigInteger(str, fromBase)).toString(toBase);}def ih_comparehash (String hash_1, String hash_2, int maxlen) {     String hashpart1;    String hashpart2;    int bitcnt = 0    int strlen = 16    int len = 0    len = hash_1.length() / strlen    for (i = 0; i < len && i < maxlen; i++) {        hashpart1 = hash_1.substring((i * strlen) + 1, strlen);        hashpart2 = hash_2.substring((i * strlen) + 1, strlen);        cfbtb_1 = convertFromBaseToBase(hashpart1, 16, 10);        cfbtb_2 = convertFromBaseToBase(hashpart2, 16, 10);        bitcnt = bitcnt + (cfbtb_1 ^ cfbtb_2).bitCount();    }    return ((64 * i) - bitcnt) * 100.0 / (64 * i);}System.out.print(ih_comparehash("8f8f87878f8f8080", "50b0f878787a9f97", 1));可戳:https ://groovyconsole.appspot.com/script/5119420292661248當(dāng)前錯誤:groovy.lang.MissingMethodException:無方法簽名:java.lang.Long.bitCount() 適用于參數(shù)類型:() 值:[]可能的解決方案:bitCount(long)at Script1.ih_comparehash(Script1.groovy:31)在 Script1$ih_comparehash.callCurrent(Unknown Source)在 Script1.run(Script1.groovy:40)如果我完全錯過了某些東西,這里是我試圖轉(zhuǎn)換為 Groovy 的 SQL 函數(shù):BEGIN    DECLARE hashpart1 varchar(64) DEFAULT "";    DECLARE hashpart2 varchar(64) DEFAULT "";    DECLARE bitcnt int DEFAULT 0;    DECLARE strlen int DEFAULT 16;    DECLARE i int DEFAULT 0;    DECLARE len int DEFAULT 0;    SET len = LENGTH(hash1) / strlen;    WHILE i<len AND i < maxlen DO        SET hashpart1 = SUBSTRING(hash1,(i*strlen)+1,strlen);        SET hashpart2 = SUBSTRING(hash2,(i*strlen)+1,strlen);        SET bitcnt = bitcnt + bit_count(cast(conv(hashpart1, 16, 10) as unsigned) ^ cast(conv(hashpart2, 16, 10) as unsigned));        SET i = i+1;    END WHILE;    RETURN ((64*i)-bitcnt)*100.0/(64*i);END
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經(jīng)驗 獲得超5個贊

SQL 代碼處理 16 位十六進制數(shù)字的塊,因為這將表達式中使用的數(shù)值的長度限制為 64 位數(shù)字。


然后它將 16 位十六進制數(shù)轉(zhuǎn)換為基數(shù)為 10,因此它可以轉(zhuǎn)換為unsigned,執(zhí)行 XOR 并進行位計數(shù)。XOR 是一個二元運算,因此 base-10 僅用于強制轉(zhuǎn)換,如果 SQL 具有解析十六進制數(shù)的函數(shù),則實際上并不需要。


在 Java 中,有一個名為BigInteger(您實際上正在使用它)的類可以處理任何長度的數(shù)字,因此可以這樣完成:


public double ih_comparehash(String hash_1, String hash_2, int maxlen) {

    int len = Math.min(hash_1.length() / 16, maxlen);

    BigInteger num1 = new BigInteger(hash_1.substring(0, 16 * len), 16);

    BigInteger num2 = new BigInteger(hash_2.substring(0, 16 * len), 16);

    int bitcnt = num1.xor(num2).bitCount();

    return ((64 * len) - bitcnt) * 100.0 / (64 * len);

}

如果您愿意,也可以使用等效的 Groovy 代碼。


查看完整回答
反對 回復(fù) 2021-08-25
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號