如何在C#中将静态字符串偏移量转换为const int类型
解决方法
首先要明确一个关键限制:const int是编译时常量,它的值必须在程序编译阶段就确定下来。
情况1:字符串是固定硬编码的
如果你的RoundSkipOffset字符串是像示例里那样写死的,那根本不需要转换,直接改成你想要的const int写法即可:
public const int RoundSkipOffset = 0x69B73F7;
情况2:字符串是运行时动态扫描得到的
如果这个字符串是程序运行后通过扫描签名动态获取的,那不可能转成const int——因为const的值必须在编译时确定。这种情况你可以用readonly int(运行时初始化一次,之后无法修改)或者普通int变量:
你之前用Parse失败,是因为默认的int.Parse不识别带0x前缀的十六进制字符串,必须指定十六进制格式的样式。正确写法如下:
// 假设scannedSignature是你扫描得到的十六进制字符串 string scannedSignature = "0x69B73F7"; // 转换为int类型 int roundSkipOffset = int.Parse(scannedSignature, System.Globalization.NumberStyles.HexNumber); // 如果要让其他函数能访问,可以定义成静态readonly字段 public static readonly int RoundSkipOffset = int.Parse("0x69B73F7", System.Globalization.NumberStyles.HexNumber);
额外说明:0x69B73F7的十进制值是111966199,这个值在int的取值范围(-2147483648 到 2147483647)内,所以用int没问题;如果扫描到的十六进制值超出这个范围,就得换成long类型来转换。
内容的提问来源于stack exchange,提问作者TerraVFX
相关产品推荐
相关产品推荐

