int __fastcall main(int argc, constchar **argv, constchar **envp) { int v4; // [rsp+Ch] [rbp-4h] BYREF
init(argc, argv, envp); puts("EEEEEEE hh iii "); puts("EE mm mm mmmm aa aa cccc hh nn nnn eee "); puts("EEEEE mmm mm mm aa aaa cc hhhhhh iii nnn nn ee e "); puts("EE mmm mm mm aa aaa cc hh hh iii nn nn eeeee "); puts("EEEEEEE mmm mm mm aaa aa ccccc hh hh iii nn nn eeeee "); puts("===================================================================="); puts("Welcome to this Encryption machine\n"); begin(); while ( 1 ) { while ( 1 ) { fflush(0LL); v4 = 0; __isoc99_scanf("%d", &v4); getchar(); if ( v4 != 2 ) break; puts("I think you can do it by yourself"); begin(); } if ( v4 == 3 ) { puts("Bye!"); return0; } if ( v4 != 1 ) break; encrypt(); begin(); } puts("Something Wrong!"); return0; }
gen = int_generator() import struct for i inrange(3): value = next(gen) # 获取生成器的下一个元素 packed = struct.pack("i", value) # 将整数打包 print(packed)
在这个例子中,next(gen)(等同于 gen.__next__()) 从生成器中获取下一个元素,这个元素是一个整数,然后将其传递给 struct.pack 函数,就不会引发 struct.error: required argument is not an integer 错误,因为 value 是一个整数。
data_list = [1, "string", 2, 3.14, 4] filtered_integers = (item for item in data_list ifisinstance(item, int)) import struct for integer in filtered_integers: packed = struct.pack("i", integer) print(packed)
这里,(item for item in data_list if isinstance(item, int)) 是一个生成器表达式,它使用 isinstance(item, int) 过滤出列表中的整数,通过迭代这个生成器,struct.pack 可以接收到正确的整数参数。
总之,.__next__() 本身不能直接解决 struct.error: required argument is not an integer,但如果在使用 struct 模块的上下文中,通过 .__next__() 正确管理迭代器或生成器,从而确保传递给 struct 模块的数据类型是正确的,那么可能间接地避免这个错误。