将char*转换为C 的结构
convert char* to structure in c++
我有以下结构
struct record{
RType m_rectype;
char m_recordname[11];
char m_recordNo;
char m_record_date[6];
}
,我有一个以下char*类型
的行line = "1Netherlands3240382"
如何将这条线掩盖到结构中。性能很重要,因为我有一个庞大的数据处理。
我已经使用了reinterpret_cast,但是结构的数组元素是否终止。
record r = reinterpret_cast<const record* >(line)
编辑:最终结果应如下
r.m_rectype = "1"
r.m_recordname = "Netherlands"
r.m_recordNo = "3"
r.m_record_date = "240382"
但是我得到以下的
r.m_rectype = "1"
r.m_recordname = "Netherlands3240382"
r.m_recordNo = "3"
r.m_record_date = "240382"
谢谢
我已经使用了reinterpret_cast
reinterpret_cast
不能用于此。您的用法具有不确定的行为。以下将得到很好的定义:
record r; // create a record object
std::memcpy(&r, line, sizeof r);
警告:
- 字符串未终止!
-
sizeof(RType)
必须是1 - 输入缓冲区不得比
sizeof r
。
但是我得到以下的
r.m_recordname = "Netherlands3240382"
Netherlands3240382
不适合成员m_recordname
,因此不可能是对象的状态。问题必须以产生输出的方式。我的怀疑是,该弦被对待好像是无效的,尽管不是这样。
假设 RType
是 char
备份的枚举类型(或某些 char
类型的别名),则您的输入 memcpy
您的输入到record
对象。您也许还可以欺骗您的编译器,以执行您打算使用reinterpret_cast
。
您经历的问题,但是,听起来您是观察通过假设null终止字符串的函数,在此record
对象中观察值。您应该使用接受长度的功能。
printf("r.m_rectype = "%d"", r.m_rectype);
printf("r.m_recordname = "%11.11s"", r.m_recordname);
printf("r.m_recordNo = "%d"", r.m_recordNo);
printf("r.m_record_date = "%6.6s"", r.m_record_date);
严格地说,标准不能保证struct
元素之间的填充,除非一开始就没有填充。因此,即使您的特殊 struct不太可能有填充 - (我认为)所有角色类型,要安全,您也可以做这样的事情:
template<typename Pod>
char const* pod_copy(char const* p, Pod& pod)
{
static_assert(std::is_pod_v<Pod>, "Must be Plain Old Data type");
std::copy(p, p + sizeof(pod), reinterpret_cast<char*>(&pod));
return p + sizeof(pod);
}
struct record{
RType m_rectype;
char m_recordname[11];
char m_recordNo;
char m_record_date[6];
};
int main()
{
record r;
auto line = "1Netherlands3240382";
auto p = line;
p = pod_copy(p, r.m_rectype);
p = pod_copy(p, r.m_recordname);
p = pod_copy(p, r.m_recordNo);
p = pod_copy(p, r.m_record_date);
// .. rest of program
}
这应该非常快,因为pos_copy
应该很好地介入。
相关文章:
- 在C++中将结构转换和存储为二进制
- 如何大致将 cpp 代码结构转换为 python
- 如何将可变大小的结构转换为字符数组
- 尝试传递结构数组,但出现"无法将'结构'转换为'结构*'错误
- 我可以安全地将浮点数的结构转换为浮点数组吗C++?
- 如何将结构转换为字符串?
- 如何将C++结构转换为 C# 等效结构?
- 将结构转换为布尔值
- 将具有不同字段的结构转换为 uint8 的数组
- 将 constexpr 结构转换为运行时结构
- 将结构转换为类
- 我必须将记录结构转换为一类,并且不断遇到多个错误
- 如何将 ANSI C 结构转换为 C++ 类,但保持其 ANSI C 友好
- 将 C++ 中的结构转换为 Java 中的类
- 将结构转换为 constexpr 数组uint8_t
- 将大型结构转换为小型C
- c++正在将未知结构转换为字符串
- C++隐式将平凡可构造的结构转换为成员
- 将C++联合结构转换为 VB6
- C到C++:将结构转换为类