我怎么能用C ++做到这一点? 在python中是
example = [u'one', u'two', u'three', u'four']
print example[1:3]
我怎样才能在C ++中做到这一点(我错过了这个功能) 我需要将其重写为C ++
while i<len(a)-1:
if (a[i]=='\x00' or a[i]=='\x04') and (eval("0x"+(a[i-1].encode("hex"))) in range(32-(4*eval((a[i].encode("hex")))),128-(12*eval((a[i].encode("hex")))))):
st+=a[i-1:i+1]
i+=2;continue
elif st=='':
i+=1;continue
elif len(st)>=4 and (a[i-1:i+1]=='\x00\x00' or a[i-1:i+1]=='\x0a\x00' or a[i-1:i+1]=='\x09\x00' or a[i-1:i+1]=='\x0d\x00'):
s.STRINGS.append([st.decode("utf-16le"),0xffffff])
s.INDEX.append(iCodeOffset+i-1-len(st))
st=''
i=i-1;continue
else:
st=''
i=i-1;continue
我需要二进制文件中的字符串列表而不使用string.exe
THX提前 Benecore
答案 0 :(得分:0)
这是一个函数,它返回一个新的拼接向量,然后给出旧的向量。它只进行最基本的拼接(从:到),并且只在一个方向上进行(不确定是否大于to但我相信python会反转输出)。
template<typename T>
std::vector<T> splice(const std::vector<T> in, int from, int to)
{
if (to < from) std::swap(to, from);
std::vector<T> ret(to - from + 1);
for (to -= from; to + 1; to--)
{
ret[to] = in[from + to];
}
return ret;
}
答案 1 :(得分:0)
首先,在C ++中没有立即替代它,因为C ++不是python,并且有自己的习惯用法不同。
首先,对于字符串,您可以使用特定的std::string::substr
。
对于更通用的容器,您应该知道C ++通常在对所述容器的元素进行操作时使用迭代器。例如,假设您想要比较向量中的元素,您可以执行以下操作:
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> a = {1,2,3,4};
std::vector<int> b = {1,2,10,4};
std::cout << "Whole vectors equal? " << (std::equal(a.begin(), a.end(), b.begin())?"yes":"no") << std::endl;
}
现在,假设我们只想比较前两个值(如[:2]
),然后我们将最后一个语句重写为:
std::cout << "First 2 values equal? " << (std::equal(a.begin(), a.begin()+2, b.begin())?"yes":"no") << std::endl;
假设我们要比较最后两个值,我们会这样做:
std::cout << "Last 2 values equal? " << (std::equal(a.end()-2, a.end(), b.begin())?"yes":"no") << std::endl;
看到出现的模式? x.begin()+i,x.begin()+j
大致等于[i:j]
,x.end()-i,x.end()-j)
大致等于[-i,-j]
。请注意,您可以将它们混合使用。
因此,通常在处理容器时,您将使用一系列迭代器,并且可以将此迭代器范围指定为与python的列表拼接非常相似。它更冗长,它是另一个成语(拼接列表再次列出,但迭代器不是容器),但是你得到的结果相同。
最后的一些说明:
x.begin()
以使代码更清晰,你也可以编写std::begin(x)
,这是更通用的,也适用于数组。 std::end
for(auto it = a.begin(); it != a.end(); it++)
,但通常将函数或lambda传递给std::foreach