十六进制累加校验和取低字节(java开发、安卓开发通用)

6 篇文章 0 订阅
5 篇文章 0 订阅

获得一组十六进制串依次累加,不需要空格,累加之后取低字节
/*********累加校验和/

public static String makeChecksum(String data) {
if (data == null || data.equals("")) {
return “”;
}
int total = 0;
int len = data.length();
int num = 0;
while (num < len) {
String s = data.substring(num, num + 2);
System.out.println(s);
total += Integer.parseInt(s, 16);
num = num + 2;
}
/**
* 用256求余最大是255,即16进制的FF
*/
int mod = total % 256;
String hex = Integer.toHexString(mod);
len = hex.length();
// 如果不够校验位的长度,补0,这里用的是两位校验
if (len < 2) {
hex = “0” + hex;
}
return hex;
}

在C#中,如果你需要对十六进制数进行累加并且需要校验结果是否合法(比如是否只有一位),你可以按照以下步骤操作: 1. 首先,将输入的十六进制字符串转换成整数,因为C#的`int`类型可以处理任意长度的无符号整数。 ```csharp string hexString = "your_hex_string"; int sum; try { sum = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber); } catch (FormatException) { // 输入不是有效的十六进制,这里可以抛出异常或处理错误 return; } ``` 2. 累加过程中,你需要保持每一位的和,而不是直接相加得到的十进制值。你可以用`ulong`(无符号长整型)来存储和,因为它可以容纳更大的数值。 ```csharp ulong carry = 0; ulong result = 0; foreach(char c in hexString) { int digit = Char.GetNumericValue(c, NumberStyles.HexNumber); result += digit + carry; carry = result > 15 ? 1 : 0; // 将超过15的部分(十六进制的F对应十进制的15)进位 } // 如果最后还有进位,则结果需要加上最后一个数字 if (carry != 0) { result += carry; } ``` 3. 最后,检查累加的结果是否小于等于15(十六进制的最大值),如果大于15,则表示结果超过了十六进制表示范围,此时结果的最后一一位就是你需要校验的部分。 ```csharp bool isValid = result <= 15; if (!isValid) { Console.WriteLine("累加后的十六进制超出范围"); } else { string lastDigitHex = result.ToString("x", CultureInfo.InvariantCulture).Substring(result.ToString("x").Length - 1); // 获最后一位的十六进制字符 } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值