我不确定以下C ++代码是做什么的(我已经更换了与点无关的部分):
unsigned char* p = ...;
unsigned int metaNum;
memcpy( &metaNum, p, sizeof( unsigned int ) );
p += sizeof( unsigned int );
for ( unsigned int m = 0; m < metaNum; m++ ) {
...
}
我知道memcpy
:
源和指向的对象的基础类型 目标指针与此函数无关;结果是 数据的二进制副本。
我还不确定metaNum
的解释是什么。它是显而易见的还是与实施有关?
答案 0 :(得分:2)
这不是特定于实现的:private void button9_Click(object sender, EventArgs e)
{
try
{
string ConnString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\temp\\names.accdb;Persist Security Info=False");
using (OleDbConnection Conn = new OleDbConnection(ConnString))
{
//Conn.Close();//severl times connection has been open
Conn.Open();
DataSet ds = new DataSet();
ds.ReadXml(@"c:\\temp\\my123.xml");
OleDbCommand cmd = new OleDbCommand();
//OleDbCommand cmd1 = new OleDbCommand();
DataTable dtCSV = new DataTable();
dtCSV = ds.Tables[0];
cmd.Connection = Conn;
cmd.CommandType = CommandType.Text;
//cmd1.Connection = Conn;
//cmd1.CommandType = CommandType.Text;
//Conn.Open();
for (int row = 0; row <= dtCSV.Rows.Count - 1; row++)
{
//for (int col = 0; col < dtCSV.Columns.Count - 1; col++)
//{
// //cmd.CommandText = ("INSERT INTO tab1 ( field1, field2) VALUES (dtCSV.Rows ,dtCSV.Columns)");
//}
cmd.Parameters.Clear();
if (dtCSV.Columns.Count > 1)
{
cmd.Parameters.Add(dtCSV.Rows[row][0].ToString());
cmd.Parameters.Add(dtCSV.Rows[row][1].ToString());
cmd.CommandText = ("INSERT INTO tab1 ( field1, field2) VALUES (? , ?)");
cmd.ExecuteNonQuery();
}
}
//Conn.Close();
}
}
catch (Exception ex)
{
richTextBox1.Text = richTextBox1.Text + "\n Error " + ex + "\n"; ;
}
}
被解释为metaNum
个字节的序列,sizeof(unsigned int)
指向的相同字节数的内容被复制到其中。< / p>
这里唯一有用的是endianness:复制到p
的相同字节序列将根据硬件存储多字节值的方式进行不同的解释,例如{{1} }。如果序列来自相同的硬件,则解释将是相同的。否则,您需要使用ntoh
/hton
函数将字节序列按顺序排列。