试图理解 Python(翻译成 C)
Attempting to understand Python (for translation to C)
[现在关闭主题,最后没用的主题]
那些是 "slices",而 +
只是将它们连接起来。这是最简单的切片情况,[start:end]
创建一个序列的子序列,从位置 start
开始,包括位置 end
,结束于位置 end
,不包括。如果其中一个缺失(但 :
存在),则认为它是完整序列的 beginning/end。指数是从零开始的。
字符串示例:
'Hello World'[1:5]
: 'ello'
'Hello World'[:5]
: 'Hello'
'Hello World'[1:]
: 'ello World'
'Hello World'[:1]+'Hello World'[5:]
: 'H World'
你的循环以 4 字节的步长遍历你的数据,将当前位置的 4 字节块与你在 ROB
中的序列进行比较,它 returns 一个没有当它被发现时(所以 f=...
部分实际上并没有修改现有的序列)。
在 C 中,您可以使用 memcmp
,然后使用 malloc
和一对 memcpy
调用,因为您正确地注意到此数据是二进制的(包含空字符),因此字符串函数将可能会破坏它。
希望我没有弄乱索引,然后它看起来像这样:
void* my_function(const void* f, int len){
for(int i=0;i<len;i+=4)
if(memcmp(f+i,ROB,4)==0){
void* ret=malloc(len-4);
memcpy(ret,f,i);
memcpy(ret+i,f+i+4,len-i-4);
return ret;
}
return NULL; // or have it die somehow
}
[现在关闭主题,最后没用的主题]
那些是 "slices",而 +
只是将它们连接起来。这是最简单的切片情况,[start:end]
创建一个序列的子序列,从位置 start
开始,包括位置 end
,结束于位置 end
,不包括。如果其中一个缺失(但 :
存在),则认为它是完整序列的 beginning/end。指数是从零开始的。
字符串示例:
'Hello World'[1:5]
:'ello'
'Hello World'[:5]
:'Hello'
'Hello World'[1:]
:'ello World'
'Hello World'[:1]+'Hello World'[5:]
:'H World'
你的循环以 4 字节的步长遍历你的数据,将当前位置的 4 字节块与你在 ROB
中的序列进行比较,它 returns 一个没有当它被发现时(所以 f=...
部分实际上并没有修改现有的序列)。
在 C 中,您可以使用 memcmp
,然后使用 malloc
和一对 memcpy
调用,因为您正确地注意到此数据是二进制的(包含空字符),因此字符串函数将可能会破坏它。
希望我没有弄乱索引,然后它看起来像这样:
void* my_function(const void* f, int len){
for(int i=0;i<len;i+=4)
if(memcmp(f+i,ROB,4)==0){
void* ret=malloc(len-4);
memcpy(ret,f,i);
memcpy(ret+i,f+i+4,len-i-4);
return ret;
}
return NULL; // or have it die somehow
}