struct 相关问题

各种编程语言中的关键字,其语法类似于或派生自C(C ++,C#,Swift,Go,Rust等)。使用特定的编程语言标记来标记涉及使用`struct`作为语法的问题,语义可以依赖于语言。关键字定义或声明由其他数据类型组成的数据类型。结构的每个成员都有自己的内存区域(而不是“union”,其成员共享一个内存区域)。

考虑用字符串和 int 作为元素填充的结构的大小

我想知道下面的结构是如何存储在内存中的。 使用 sizeof() 显示给定的结构大小 28。我想知道为什么会这样? 类型定义结构{ 字符a[10]; 整数c; ...

回答 1 投票 0

Bigquery:将具有空结构记录的行压缩为单个记录

使用 Bigquery。 我正在尝试合并 Array> 中的两列。 以下是我提出的查询。 如果两列中的任意一列中的值为空或...

回答 1 投票 0

C 中是否有语法可以直接初始化作为常量文字的 const 数组的结构成员?

假设,我使用具有属性的对象。比方说:形状、颜色和大小。每个属性都是有效选项的列表。例如,形状:圆形或方形,颜色:橙色或黄色...

回答 1 投票 0

如何在C中修改二进制文件中Struct的成员变量

结构: typedef 结构文件 { 字符名称[20]; 整数大小; 整数偏移量; } 文件; 二进制文件的结构: 文件数量 --> 4 字节 文件结构 --> 每个 28 字节 文件内容...

回答 1 投票 0

C++ Boost 描述递归结构迭代错误

我正在编写一个代码,该代码使用 Boost 库递归地迭代一个结构,并将缓冲区中的字节放入该结构中。 模板 我正在编写一个代码,该代码使用 Boost 库递归地迭代一个结构,并将字节从缓冲区放入该结构中。 template<typename Base, class Md = boost::describe::describe_members<Base, boost::describe::mod_any_access>> void Parser::copyBytesToStruct(Base& base){ boost::mp11::mp_for_each<Md>([&](auto attr){ this->copyBytesToStructInner(base.*attr.pointer); }); } template<typename Attr> void Parser::copyBytesToStructInner(Attr& attr){ //check if iterated type is struct, if it is then recursively call this function for it if(std::is_class<Attr>::value){ this->copyBytesToStruct(attr); } else{ int bytesToGet = sizeof(Attr); if (this->buffer->availableToCopy() < bytesToGet) { std::string typeName = boost::typeindex::type_id_with_cvr<Attr>().pretty_name(); std::cerr << "No more remaining data in buffer to read " + typeName; return; } int beginPtr = this->buffer->getBeginPtr(); memcpy_s(this->buffer + beginPtr, this->buffer->availableToCopy(), &attr, bytesToGet); //if(!this->isBigEndian) __builtin_bswap(attr); todo: add some reverse logic here this->buffer->cutBytes(bytesToGet); } } copyBytesToStruct 最初将始终使用结构体进行调用。 然后我迭代结构体的成员和内部模板的内部,我检查该成员是否是结构体,如果是,我也想递归地迭代该成员。 这些是我正在使用和描述的用于提升的结构: namespace PE_STRUCTURE { struct DosHeader { WORD magic{}, //DOS .EXE header e_cblp{}, //Magic number e_cp{}, //Bytes on last page of file e_crlc{}, //Pages in file e_cparhdr{}, //Relocations e_minalloc{}, //Size of header in paragraphs e_maxalloc{}, //Minimum extra paragraphs needed e_ss{}, //Initial (relative) SS value e_sp{}, //Initial SP value e_csum{}, //Checksum e_ip{}, //Initial IP value e_cs{}, //Initial (relative) CS value e_lfarlc{}, //File address of relocation table e_ovno{}, //Overlay number e_res[4]{}, //Reserved words e_oemid{}, //OEM identifier e_oeminfo{}, //OEM information e_res2[10]{}; //Reserved words DWORD e_lfanew{}; //Address for NT Headers }; BOOST_DESCRIBE_STRUCT(DosHeader, (), (magic, e_cblp, e_cp, e_crlc, e_cparhdr, e_minalloc, e_maxalloc, e_ss, e_sp, e_csum, e_ip, e_cs, e_lfarlc, e_ovno, e_res, e_oemid, e_oeminfo, e_res2, e_lfanew)); //For PE32+ (64-bit) Executables struct ImageNtHeaders64 { DWORD signature{}; //almost always PE/0/0 IMAGE_FILE_HEADER FileHeader{}; //Some information, has OptionalHeader size IMAGE_OPTIONAL_HEADER64 OptionalHeader{}; //Some important info }; BOOST_DESCRIBE_STRUCT(ImageNtHeaders64, (), (signature, FileHeader, OptionalHeader)); BOOST_DESCRIBE_STRUCT(IMAGE_FILE_HEADER, (), (Machine, NumberOfSections, TimeDateStamp, PointerToSymbolTable, NumberOfSymbols, SizeOfOptionalHeader, Characteristics)); BOOST_DESCRIBE_STRUCT(IMAGE_OPTIONAL_HEADER32, (), (Magic, MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData, SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, BaseOfData, ImageBase, SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion, Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics, SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit, LoaderFlags, NumberOfRvaAndSizes, DataDirectory)); BOOST_DESCRIBE_STRUCT(IMAGE_OPTIONAL_HEADER64, (), (Magic, MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData, SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, ImageBase, SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion, Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics, SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit, LoaderFlags, NumberOfRvaAndSizes, DataDirectory)); BOOST_DESCRIBE_STRUCT(IMAGE_DATA_DIRECTORY, (), (VirtualAddress, Size)) //For PE32 Executables struct ImageNtHeaders { DWORD signature{}; IMAGE_FILE_HEADER FileHeader{}; IMAGE_OPTIONAL_HEADER32 OptionalHeader{}; }; BOOST_DESCRIBE_STRUCT(ImageNtHeaders, (), (signature, FileHeader, OptionalHeader)); }; 我在尝试构建时遇到这样的错误: error: no matching function for call to 'PE_PARSER::Parser::copyBytesToStruct(short unsigned int&)' 28 | this->copyBytesToStruct(attr); error: 'boost_public_member_descriptor_fn' was not declared in this scope; did you mean 'PE_STRUCTURE::boost_public_member_descriptor_fn'? 32 | template<class T> using _describe_public_members = decltype( boost_public_member_descriptor_fn( static_cast<T**>(0) ) ); error: no matching function for call to 'PE_PARSER::Parser::copyBytesToStruct(short unsigned int [4])' 28 | this->copyBytesToStruct(attr); error: 'boost_public_member_descriptor_fn' was not declared in this scope; did you mean 'PE_STRUCTURE::boost_public_member_descriptor_fn'? 32 | template<class T> using _describe_public_members = decltype( boost_public_member_descriptor_fn( static_cast<T**>(0) ) ); error: no matching function for call to 'PE_PARSER::Parser::copyBytesToStruct(short unsigned int [10])' 28 | this->copyBytesToStruct(attr); error: 'boost_public_member_descriptor_fn' was not declared in this scope; did you mean 'PE_STRUCTURE::boost_public_member_descriptor_fn'? 32 | template<class T> using _describe_public_members = decltype( boost_public_member_descriptor_fn( static_cast<T**>(0) ) ); error: no matching function for call to 'PE_PARSER::Parser::copyBytesToStruct(long unsigned int&)' 28 | this->copyBytesToStruct(attr); | ^~~~ error: 'boost_public_member_descriptor_fn' was not declared in this scope; did you mean 'PE_STRUCTURE::boost_public_member_descriptor_fn'? 32 | template<class T> using _describe_public_members = decltype( boost_public_member_descriptor_fn( static_cast<T**>(0) ) ); 这几乎就像编译器尝试使用整数调用 copyBytesToStruct,而该整数没有 BOOST_DESCRIBE_STRUCT - 该模板只能与结构一起使用。 我尝试对两个模板函数执行 std::enable_if_t ,但错误仍然相同: template<typename Base, class Md = boost::describe::describe_members<Base, boost::describe::mod_any_access>> std::enable_if_t<(std::is_class<Base>::value)> copyBytesToStruct(Base& base); 关于做什么/这里发生了什么有什么建议吗? 最小可重现示例: StructureRepro.hpp: #ifndef STRUCTURE_H #define STRUCTURE_H #include <Windows.h> #include <stdint.h> #include <winnt.h> #include <boost/describe/class.hpp> namespace PE_STRUCTURE { //For PE32+ (64-bit) Executables struct ImageNtHeaders64 { DWORD signature{}; //almost always PE/0/0 IMAGE_FILE_HEADER FileHeader{}; //Some information, has OptionalHeader size IMAGE_OPTIONAL_HEADER64 OptionalHeader{}; //Some important info }; BOOST_DESCRIBE_STRUCT(ImageNtHeaders64, (), (signature, FileHeader, OptionalHeader)); BOOST_DESCRIBE_STRUCT(IMAGE_FILE_HEADER, (), (Machine, NumberOfSections, TimeDateStamp, PointerToSymbolTable, NumberOfSymbols, SizeOfOptionalHeader, Characteristics)); BOOST_DESCRIBE_STRUCT(IMAGE_OPTIONAL_HEADER64, (), (Magic, MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData, SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, ImageBase, SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion, Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics, SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit, LoaderFlags, NumberOfRvaAndSizes, DataDirectory)); BOOST_DESCRIBE_STRUCT(IMAGE_DATA_DIRECTORY, (), (VirtualAddress, Size)) }; #endif ParserRepro.cpp: #include "StructureRepro.hpp" #include <vector> #include <stdint.h> #include <windows.h> #include <fstream> #include <iostream> #include <cstring> #include <type_traits> #include <boost/mp11.hpp> #include <boost/type_index.hpp> #include <boost/describe.hpp> template<typename Attr> void copyBytesToStructInner(Attr& attr); template<typename Base, class Md = boost::describe::describe_members<Base, boost::describe::mod_any_access>> void copyBytesToStruct(Base& base){ boost::mp11::mp_for_each<Md>([&](auto attr){ copyBytesToStructInner(base.*attr.pointer); }); } template<typename Attr> void copyBytesToStructInner(Attr& attr){ //check if iterated type is struct, if it is then recursively call this function for it if(std::is_class<Attr>::value){ copyBytesToStruct(attr); } } void loadPEFileFromBinary() { PE_STRUCTURE::ImageNtHeaders64 st; copyBytesToStruct(st); } 这几乎就像编译器尝试使用整数调用 copyBytesToStruct,而该整数没有 BOOST_DESCRIBE_STRUCT - 该模板只能与结构一起使用。 这正是您的代码所做的,确实。 您可以通过将条件设置为 constexpr 来避免它: if constexpr (std::is_class_v<Attr>) { std::cout << __PRETTY_FUNCTION__ << " " << boost::typeindex::type_id<Attr>().pretty_name() << std::endl; copyBytesToStruct(attr); } else { std::cout << "Handle manually " << boost::typeindex::type_id<Attr>().pretty_name() << std::endl; } 现在,您还必须修复推导类型上的 const-ref 限定符(或用 std::decay_t 包装它们。 这是我的(非 Windows)模型。作为奖励,我投入了 C 风格数组的处理(因为这可能是您需要的): 住在Coliru #include <boost/describe.hpp> #include <boost/mp11.hpp> #include <boost/type_index.hpp> #include <cstdint> #include <iostream> namespace PE_STRUCTURE { using DWORD = uint32_t; struct IMAGE_FILE_HEADER { DWORD Machine, NumberOfSections, TimeDateStamp, PointerToSymbolTable, NumberOfSymbols, SizeOfOptionalHeader, Characteristics; }; struct IMAGE_DATA_DIRECTORY { DWORD VirtualAddress, Size; }; struct IMAGE_OPTIONAL_HEADER64 { DWORD Magic, MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData, SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, ImageBase, SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion, Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics, SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit, LoaderFlags, NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[16]; }; // For PE32+ (64-bit) Executables struct ImageNtHeaders64 { DWORD signature{}; // almost always PE/0/0 IMAGE_FILE_HEADER FileHeader{}; // Some information, has OptionalHeader size IMAGE_OPTIONAL_HEADER64 OptionalHeader{}; // Some important info }; BOOST_DESCRIBE_STRUCT(ImageNtHeaders64, (), (signature, FileHeader, OptionalHeader)); BOOST_DESCRIBE_STRUCT(IMAGE_FILE_HEADER, (), (Machine, NumberOfSections, TimeDateStamp, PointerToSymbolTable, NumberOfSymbols, SizeOfOptionalHeader, Characteristics)); BOOST_DESCRIBE_STRUCT(IMAGE_OPTIONAL_HEADER64, (), (Magic, MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData, SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, ImageBase, SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion, Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics, SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit, LoaderFlags, NumberOfRvaAndSizes, DataDirectory)); BOOST_DESCRIBE_STRUCT(IMAGE_DATA_DIRECTORY, (), (VirtualAddress, Size)) }; // namespace PE_STRUCTURE template <typename Attr> void copyBytesToStructInner(Attr const& attr); template <typename Element, size_t N> void copyBytesToStructInner(Element const (&arr)[N]); template <typename Base, class Md = boost::describe::describe_members<Base, boost::describe::mod_any_access>> void copyBytesToStruct(Base const& base) { boost::mp11::mp_for_each<Md>([&](auto attr) { copyBytesToStructInner(base.*attr.pointer); }); } template <typename Element, size_t N> void copyBytesToStructInner(Element const (&arr)[N]) { std::cout << __PRETTY_FUNCTION__ << " " << boost::typeindex::type_id<Element>().pretty_name() << std::endl; for (auto& el : arr) { copyBytesToStructInner(el); } } template <typename Attr> void copyBytesToStructInner(Attr const& attr) { // check if iterated type is struct, if it is then recursively call this function for it if constexpr (std::is_class_v<Attr>) { std::cout << __PRETTY_FUNCTION__ << " " << boost::typeindex::type_id<Attr>().pretty_name() << std::endl; copyBytesToStruct(attr); } else { // std::cout << "Handle manually " << boost::typeindex::type_id<Attr>().pretty_name() << std::endl; } } void loadPEFileFromBinary() { PE_STRUCTURE::ImageNtHeaders64 st; copyBytesToStruct(st); } int main() { loadPEFileFromBinary(); } 印刷 void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_FILE_HEADER] PE_STRUCTURE::IMAGE_FILE_HEADER void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_OPTIONAL_HEADER64] PE_STRUCTURE::IMAGE_OPTIONAL_HEADER64 void copyBytesToStructInner(const Element (&)[N]) [with Element = PE_STRUCTURE::IMAGE_DATA_DIRECTORY; long unsigned int N = 16] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY 或者,取消注释“手动处理”行:https://coliru.stacked-crooked.com/a/cc83adeeb89044c8 Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_FILE_HEADER] PE_STRUCTURE::IMAGE_FILE_HEADER Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_OPTIONAL_HEADER64] PE_STRUCTURE::IMAGE_OPTIONAL_HEADER64 Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Element (&)[N]) [with Element = PE_STRUCTURE::IMAGE_DATA_DIRECTORY; long unsigned int N = 16] PE_STRUCTURE::IMAGE_DATA_DIRECTORY void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int void copyBytesToStructInner(const Attr&) [with Attr = PE_STRUCTURE::IMAGE_DATA_DIRECTORY] PE_STRUCTURE::IMAGE_DATA_DIRECTORY Handle manually unsigned int Handle manually unsigned int

回答 1 投票 0

将矩阵字段设置为Matlab结构体

我正在将Matlab代码与集成engine.h的C++代码连接起来。 我创建了一个包含多个标量和矩阵字段的结构。我首先使用命令行语法创建标量字段,我写了他...

回答 1 投票 0

在Golang中尝试反序列化为golang中的结构

实际上我正在尝试从sql服务器(特定表)获取数据,我的期望是将从sql服务器获取的数据反序列化为GoLang中的结构。 声明如下结构体 类型

回答 1 投票 0

读取 JSON 文件并获取正确的数据类型:InferShema 给我带来了问题,并且将其设置为 false 不是一个选项

我正在构建一个数据存储库,并从源应用程序的 API 中以 JSON 形式获取数据。这些 JSON 非常复杂,它们的结构可能会因调用而变化,因为我只得到 ch...

回答 1 投票 0

是否允许转换和取消引用“兼容”结构的结构指针?

假设我有类似的东西: 列表.h: //... #包括 typedef 结构体node_s{ 结构node_s *下一个; 结构体node_s *prev; 字符数据[]; }节点_t; void* getDataFromNode(

回答 3 投票 0

在 Rust 中,有没有一种方法可以让我定义两个结构,并且两者都遵循标准结构?

我正在尝试创建一个结构体,其中包含所有其他结构体中存在的基本函数,如下所示: pub 结构 GenericSelect { 表:字符串, 不同:布尔值, 栏目:选项 我正在尝试创建一个结构体,它将包含所有其他结构体中存在的基本函数,在这里: pub struct GenericSelect { table: String, distinct: bool, columns: Option<String>, group: Option<String>, order: Option<String>, limit: Option<u32>, offset: Option<u32>, } impl GenericSelect { pub fn new<T: Into<String>>(table: T) -> GenericSelect { GenericSelect { table: table.into(), distinct: false, columns: None, group: None, order: None, limit: None, offset: None, } } pub fn distinct(&mut self) -> &mut Self { self.distinct = true; self } pub fn columns<T: Into<String>>(&mut self, columns: T) -> &mut Self { self.columns = Some(columns.into()); self } pub fn group<T: Into<String>>(&mut self, group: T) -> &mut Self { self.group = Some(group.into()); self } pub fn order<T: Into<String>>(&mut self, order: T) -> &mut Self { self.order = Some(order.into()); self } pub fn limit(&mut self, limit: u32) -> &mut Self { self.limit = Some(limit); self } pub fn offset(&mut self, offset: u32) -> &mut Self { self.offset = Some(offset); self } pub fn build(&self) -> String { let mut statement = String::from("SELECT"); if self.distinct { statement.push_str(" DISTINCT"); } if let Some(columns) = &self.columns { statement.push_str(&format!(" {}", columns)); } else { statement.push_str(" *"); } statement.push_str(&format!(" FROM {}", self.table)); if let Some(group) = &self.group { statement.push_str(&format!(" GROUP BY {}", group)); } if let Some(order) = &self.order { statement.push_str(&format!(" ORDER BY {}", order)); } if let Some(limit) = &self.limit { statement.push_str(&format!(" LIMIT {}", limit)); } if let Some(offset) = &self.offset { statement.push_str(&format!(" OFFSET {}", offset)); } statement.push(';'); statement } } 我希望一个特定的结构拥有这个结构所拥有的一切,而不需要逐个方法编写,并且我还希望有可能在必要时实现一个函数,例如更改特定函数的行为等。 特质将完全满足您的需求。 这是 Rust 文档中的示例: pub trait Summary { fn summarize_author(&self) -> String; fn summarize(&self) -> String { format!("(Read more from {}...)", self.summarize_author()) } } 这是描述共享行为的模板。当您希望一个结构体参与这种共享行为时,请在其上编写一个 impl,至少编写所需的功能 impl Summary for Tweet { fn summarize_author(&self) -> String { format!("@{}", self.username) } } 在特征中,您可以拥有具有默认实现的函数summarize。然后,指定像 summarize_author 这样的函数,它们为您提供一些跨结构的标准接口,供您的默认实现依赖。 如果您想覆盖汇总功能,您可以在impl中执行此操作: impl Summary for Tweet { fn summarize_author(&self) -> String { format!("@{}", self.username) } fn summarize(&self) -> String { format!("(More about this tweet by {})...", self.summarize_author()) } } 来源:https://doc.rust-lang.org/book/ch10-02-traits.html

回答 1 投票 0

cuda 中自定义结构的内存分配

我有这些结构: typedef 结构边缘 { 开始; 打算; } 边缘; 类型定义结构{ 整数度; int 名称; 边缘*边缘; 顶点; 在我的主要功能中,我有一个初始

回答 1 投票 0

Go,striket 的二维数组(或切片)

以下代码运行良好: 包主 进口 ( “FMMT” ) 类型节点结构体{ 北国际 东国际 南国际 西国际 } 函数主() { 房间X := 5 房间Y:...

回答 1 投票 0

是否可以使用位字段数组?

我很好奇,是否可以使用位字段数组?喜欢: 结构体 { 无符号整型 i[5]: 4; };

回答 5 投票 0

可以简化此代码以向 std::map 添加结构吗?

我有这样的结构: 结构体S_SWAP_TALK { S_TALK_INFO* pHomeTalk{}; S_AWAY_TALK* pAwayTalk{}; }; 而且,我有这个 std::map: std::map m_mapSwapTalks; 此刻...

回答 1 投票 0

通过参数名称访问数组中的结构体

假设我们有一个结构体数组 结构体用户配置:{ 让sampleConfig:[SampleConfig]? } 在 SampleConfig 数组中我们有: 结构样本配置:{ valueOne:字符串? valueTwo:字符串...

回答 1 投票 0

接受任何结构体作为参数并根据结构体名称使用它的Golang函数

我想创建接受传递的任何结构并使用它的函数(在我的例子中,根据结构名称将其存储在数据库中)。 这个怎么做? 这是我的代码供参考: 功能(...

回答 1 投票 0

从cpp中结构内部的向量接收零值

我正在尝试使用 write() 通过管道将结构发送到另一个进程,该结构包含一个向量,并且该向量在被另一个进程读取时给出零值。 每当过程出现...

回答 1 投票 0

使用 Playground 验证器对标签 required_with 和 len 进行结构验证

我正在测试这个 required_with 和 len。 包主 导入“fmt” 导入“github.com/go-playground/validator/v10” 类型 NomineeChangeInfo 结构 { 名称字符串 `json:"...

回答 1 投票 0

未知的覆盖说明符和缺少类型说明符 - 假定为 int

我是编程新手,特别是这里的 C 编程,我正在学习结构。不幸的是我遇到了问题。 当我运行代码时,会弹出此错误。 我不知道发生了什么...

回答 1 投票 0

如何在C中创建24位无符号整数

我正在开发一个 RAM 非常紧张的嵌入式应用程序。 为此,我需要创建一个 24 位无符号整数数据类型。我正在使用一个结构来执行此操作: 类型定义结构 {

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.