gpt4 book ai didi

c - 如何从 strlen 返回中减去十六进制然后添加到十六进制地址?

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

我想检查字符串长度然后减去 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);添加 strlen 返回值会正确增加十六进制变量(地址)值吗?

编辑2:好的,因为在上下文之外命名变量地址会令人困惑,可以说unsigned long int address;是 -> unsigned long int MIKE;

最佳答案

首先,符号 (0x)seekNP->address 不是有效的 C。您可能会想到 类型转换,其中一个变量的类型被转换为其他。无论如何:

seekNP->address = seek->address +((strlen(seek->operand_1)) - 0xF);

下列说法正确的是(假设确实有一个 seek->address 它在语法上是正确的。否则,(假设显示的结构)这似乎更可能是您的意思:

struct  { 
unsigned long int address;
char operand_1[12];
}seekNP;
....

// interger = integer - integer
seekNP->address = strlen(seekNP->operand_1) - 0xF; //seems more correct given
//the variable you are showing.

为了澄清,正如评论中提到的,所有形式的 int 都以二进制形式存储在内存中。视觉表示(即,它的格式是否将其值呈现为十进制、十六进制或八进制对于内存中存储的值没有影响。因此,C语句可以在其语句中混合和匹配各种形式的整数,而不必担心内存中的结果值会受到影响。

int sum = 103 + 1003 + 10003;
int sum = 0x67 + 0x3eb + 0x2713

两者的结果都是111090x2B65

关于c - 如何从 strlen 返回中减去十六进制然后添加到十六进制地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578021/

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