表字段结构为 id(int), name( varchar(100) )加密后String的ascii集为 0xf0, 0x07, 0xb1, 0x1a,
0xbd, 0xec, 0x95, 0x09,
0x45, 0xf8, 0xfe, 0xa4,
0xe0, 0xdb, 0x6e, 0x68,
0x87, 0x6c, 0x09, 0x0f,
0x05, 0x54, 0x6f, 0x72, '\0',使用AsString赋值给name字段,马上读出(数据还未update到数据库,直接从内存读),字符集变为 0x3f, 0x3f, 0xbd, 0xec,
0x3f, 0x45, 0xf8, 0xfe,
0xa4, 0xe0, 0xdb, 0x6e,
0x68, 0x87, 0x6c, 0x09,
0x0f, 0x05, 0x54, 0x6f,
0x72, '\0',后又使用SetData设置数据,结果和AsString出现一样的问题。请高手指教!!!总共200分,还有一百分在C++ builder区。
0xbd, 0xec, 0x95, 0x09,
0x45, 0xf8, 0xfe, 0xa4,
0xe0, 0xdb, 0x6e, 0x68,
0x87, 0x6c, 0x09, 0x0f,
0x05, 0x54, 0x6f, 0x72, '\0',使用AsString赋值给name字段,马上读出(数据还未update到数据库,直接从内存读),字符集变为 0x3f, 0x3f, 0xbd, 0xec,
0x3f, 0x45, 0xf8, 0xfe,
0xa4, 0xe0, 0xdb, 0x6e,
0x68, 0x87, 0x6c, 0x09,
0x0f, 0x05, 0x54, 0x6f,
0x72, '\0',后又使用SetData设置数据,结果和AsString出现一样的问题。请高手指教!!!总共200分,还有一百分在C++ builder区。
{
0xf0, 0x07, 0xb1, 0x1a,
0xbd, 0xec, 0x95, 0x09,
0x45, 0xf8, 0xfe, 0xa4,
0xe0, 0xdb, 0x6e, 0x68,
0x87, 0x6c, 0x09, 0x0f,
0x05, 0x54, 0x6f, 0x72,
'\0',
}; String str1 = encBuf; ADOTable1->Active = false;
ADOTable1->TableName = "test_enc";
ADOTable1->Active = true; ADOTable1->Edit();
ADOTable1->FieldByName("name")->AsString = str1;
// 或者 ADOTable1->FieldByName("name")->AsString = encBuf;
// 或者 ADOTable1->FieldByName("name")->SetData( encBuf, false ); ShowMessage( str1.Length() );
ShowMessage( ADOTable1->FieldByName("name")->AsString.Length() );
byte数组和char好像没什么区别吧,我是用bcb的。谢谢。
两种方案:一是使用BLOB保存
一是转换为HEX