【发布时间】:2018-03-30 16:36:28
【问题描述】:
我想检查一个字符串长度,然后减去 0x3(十六进制);然后添加到存储为十六进制的地址;然后将结果以十六进制形式放入地址中。 地址存储在无符号长整数中。
struct node { unsigned long int address; char operand_1[12];};
它是这样工作的吗:
(0x)seekNP->address = (0x)seek->address +(( (0x)strlen(seek->operand_1)) - 0x3);
或类似:
seekNP->address = seek->address +((strlen(seek->operand_1)) - 0xF);
我知道所有数字最后都以二进制形式存储,也许我的问题也应该是当我在十六进制和十进制 size_t 返回类型甚至十进制之间执行算术时会发生什么?
它们是否都自动转换为二进制然后对二进制执行操作?
编辑:说char Operand_1 = "1000";,我通过seek->address = strtol(seek->operand_1,NULL,16);将它存储在unsigned long address
添加strlen返回值会正确增加十六进制变量(地址)值吗?
编辑 2:好的,因为脱离上下文命名变量地址令人困惑,可以说 unsigned long int address; 是 -> unsigned long int MIKE;
【问题讨论】:
-
您自己说您知道所有数字都以二进制形式存储。这意味着除了表示之外,十六进制、十进制、八进制和二进制数字格式之间实际上没有区别。十六进制值
0x03等于十进制3等于八进制03等于二进制101。所以你真的不能将变量(如seekNP->address)中的值“转换”为十六进制,这没有任何意义。 -
没有转换,它只是二进制。以十六进制查看数字只是查看数据的众多方法之一。与二进制加法相比,十六进制加法没有特殊的电路
-
顺便说一句,将字符串的数字长度添加到变量
unsigned long int address中存储的值中,不会更改该变量在内存中的地址。 -
@ryyker 没有添加到地址中,我添加到了名为地址的变量中。
-
@topcat
address字段是否包含其他变量的地址?如果是这样,这表明您的代码中存在另一个潜在问题,因为地址不应存储在unsigned long中。