如何读取DAT文件内容?

headsonlkc 2010-10-15 11:42:26
07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 EC EF EC EF EC EF EC EF EC EF 66 66 66 66 66 A6 77 B5 58 A9 D4 2E 20 2E A6 CC A7 C6 A8 C8 A4 40 A9 77 B7 7C A6 75 C5 40 B5 DB A7 DA AD CC AA BA A1 41 AE F8 B7 C0 AD DF A4 FD AA BA B8 F4 C1 D9 AB DC AA F8 A1 41 A7 DA AD CC A4 40 B0 5F A5 5B AA 6F A7 61 A1 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 07 E0 0B 35 EC EF EC EF EC EF EC EF EC EF 66 66 66 66 66 A6 77 B5 58 A9 D4 2E 20 2E A6 CC A7 C6 A8 C8 A4 40 A9 77 B7 7C A6 75 C5 40 B5 DB A7 DA AD CC AA BA A1 41 AE F8 B7 C0 AD DF A4 FD AA BA B8 F4 C1 D9 AB DC AA F8 A1 41 A7 DA AD CC A4 40 B0 5F A5 5B AA 6F A7 61 A1 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我所知道的它是一段汉字,但我把他直接转成汉字,就是乱码,加了繁体转,也是一样
一般在DAT文件上,如何读取文件内容
以下是我给的一个文件库:http://www.85196146.com/DownFiles/Characters.Dat
大家帮我看看,搞好了再加分!
谢谢!
...全文
1086 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2010-10-15
  • 打赏
  • 举报
回复
安琪拉米希亞一定會守護著我們的,消滅冥王的路還很長,我們一起加油吧!

BIG5编码,但是前35字节不是文本...

另外...dat仅仅是个文件后缀,和文件格式没有必然联系...
铛铛 2010-10-15
  • 打赏
  • 举报
回复
你首先得明白这些数据格式
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
文件在winhex看的

自定义格式,是不是如这样:1 张三 男 80分这样的情况?
lhy 2010-10-15
  • 打赏
  • 举报
回复
dat的意思是数据文件,一般都是自定义格式,如果对方不告诉你格式,不容易破解的。
jointan 2010-10-15
  • 打赏
  • 举报
回复
你这是二进制编辑器中看到的,还是文本编辑器中看到的?
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
分少了吗?没有人理我呀!顶顶先
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
while ( 1 )
{
v21 = v112;
if ( v112 == 2 )
{
sub_473C2F(1);
v22 = CBrush__CBrush(*((_DWORD *)v4 + 16));
if ( v22 == v2 )
v23 = 0;
else
v23 = *(HBRUSH *)(v22 + 4);
FillRgn(hDC, (HRGN)(&v117 != 0 ? (int)hrgnDst : 0), v23);
v132 = &off_55AC50;
LOBYTE(v181) = 17;
sub_47446F(&v132);
v24 = *((_DWORD *)v4 + 23);
v25 = *((_DWORD *)v4 + 22);
LOBYTE(v181) = 16;
sub_43D650(&v133, v25, v24);
}
if ( v141 == 1 )
{
if ( pt.y <= y )
{
if ( v21 == 1 )
{
v27 = 0;
v26 = 0;
if ( v105 > v2 )
{
do
{
v28 = sub_42BE40(v26);
v27 = sub_42C000(v27, v28);
++v26;
}
while ( v26 < v105 );
}
for ( i = v98; i < v108; ++i )
{
v30 = sub_42BE40(i);
v27 = sub_42C000(v27, v30);
}
rect.bottom = y;
rect.left = v2;
rect.right = v106 + v27;
rect.top = v2;
IntersectRect(&rect, &rect, (const RECT *)&pt);
if ( !IsRectEmpty(&rect) )
{
LPtoDP(hdc, (LPPOINT)&rect, 2);
v31 = CreateRectRgnIndirect(&rect);
sub_474418(v31);
CombineRgn(hrgnDst, (HRGN)(&v117 != 0 ? (int)hrgnDst : 0), (HRGN)(&v109 != 0 ? v110 : 0), 4);
sub_47446F(&v109);
DPtoLP(hdc, (LPPOINT)&rect, 2);
sub_473A6C(&v153);
PatBlt(hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, 0xF00021u);
}
}
else
{
v32 = v98 - v105;
v33 = 0;
v102 = v98 - v105;
v34 = v98 - v105 - 1;
v100 = v98 - v105 - 1;
if ( v34 < v108 )
{
while ( v33 <= v121 )
{
if ( v34 >= v32 )
{
v37 = __SETO__(v34, v98);
v36 = v34 - v98 < 0;
v35 = v100;
if ( v36 ^ v37 )
v35 = v105 + v100 - v98;
rect.left = v33;
v38 = sub_42BE40(v35);
rect.right = sub_42C000(v33, v38);
rect.bottom = y;
rect.top = v2;
IntersectRect((LPRECT)&v170, &rect, (const RECT *)&pt);
rc.top = v171;
rc.left = v170;
rc.right = v172;
rc.bottom = v173;
if ( !IsRectEmpty(&rc) )
{
sub_4295E0(v35, &v131);
if ( &v97 != (char *)-144 )
{
if ( h != (HGDIOBJ)v2 )
SelectObject(hDC, h);
}
sub_473C00(v2);
(*(void (__thiscall **)(int *, int *, _DWORD, RECT *, signed int))(v133 + 104))(
&v133,
v131,
*(v131 - 2),
&rect,
2085);
}
v34 = v100;
}
sub_473A6C(&v136);
if ( v34++ == v102 - 1 )
{
if ( v106 >= pt.x )
{
x = 1;
v104 = 1;
DPtoLP(hdc, (LPPOINT)&x, 1);
sub_473A6C(&v139);
v39 = y;
CDC__MoveTo((int)&v176, x, y);
CDC__LineTo(x, v104);
CDC__LineTo(v106, v104);
sub_473A6C(&v136);
CDC__MoveTo((int)&v178, v2, v39);
CDC__LineTo(v2, v2);
CDC__LineTo(v106, v2);
CDC__LineTo(v106, v39);
CDC__LineTo(v2, v39);
}
v33 = v106;
}
else
{
v40 = v34;
if ( v34 < v98 )
v40 = v105 + v34 - v98;
v42 = sub_42BE40(v40);
v41 = sub_42C000(v33, v42);
if ( v41 >= pt.x )
{
x = v33;
v104 = v2;
LPtoDP(hdc, (LPPOINT)&x, 1);
++x;
DPtoLP(hdc, (LPPOINT)&x, 1);
sub_473A6C(&v139);
CDC__MoveTo((int)&v179, x, y);
CDC__LineTo(x, v2);
sub_473A6C(&v136);
CDC__LineTo(v41, v2);
CDC__LineTo(v41, y);
CDC__LineTo(v33, y);
}
v33 = v41;
v34 = v100;
}
v100 = v34;
if ( v34 >= v108 )
break;
v32 = v102;
}
}
}
}
if ( pt.x <= v106 )
{
v44 = y;
v43 = v101 - v113;
v100 = v101 - v113;
if ( v101 - v113 < v116 )
{
while ( 1 )
{
if ( v44 > v122 )
goto LABEL_61;
if ( v43 < v101 )
v43 = v113 + v43 - v101;
v46 = sub_42BD60(v43);
v45 = sub_42C130(v44, v46);
if ( v45 >= pt.y )
{
rect.left = 0;
rect.right = v106;
rect.top = v44;
rect.bottom = v45;
if ( v112 == 1 )
{
IntersectRect(&rect, &rect, (const RECT *)&pt);
if ( !IsRectEmpty(&rect) )
{
sub_473A6C(&v153);
PatBlt(hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, 0xF00021u);
LPtoDP(hdc, (LPPOINT)&rect, 2);
v47 = CreateRectRgnIndirect(&rect);
sub_474418(v47);
CombineRgn(hrgnDst, (HRGN)(&v117 != 0 ? (int)hrgnDst : 0), (HRGN)(&v109 != 0 ? v110 : 0), 4);
sub_47446F(&v109);
}
}
else
{
x = 0;
v104 = v44;
LPtoDP(hdc, (LPPOINT)&x, 1);
++v104;
DPtoLP(hdc, (LPPOINT)&x, 1);
sub_473A6C(&v139);
CDC__MoveTo((int)&v177, 0, v104);
CDC__LineTo(v106, v104);
sub_473A6C(&v136);
CDC__LineTo(v106, v45);
CDC__LineTo(0, v45);
CDC__LineTo(0, v44);
wsprintfA(&Src, "%d", v43 + 1);
if ( &v126 )
{
if ( h )
SelectObject(hDC, h);
}
sub_473C00(0);
sub_46D83F(&Src);
v48 = *(_DWORD *)(v146 - 8);
LOBYTE(v181) = 18;
(*(void (__thiscall **)(int *, int, int, RECT *, signed int))(v133 + 104))(
&v133,
v146,
v48,
&rect,
2085);
LOBYTE(v181) = 16;
sub_46D7D1(&v146);
}
}
v44 = v45;
v50 = __SETO__(v100 + 1, v116);
v49 = v100++ + 1 - v116 < 0;
if ( !(v49 ^ v50) )
break;
v43 = v100;
v2 = 0;
}
v2 = 0;
}
}
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
int __thiscall sub_42C6F0(void *this)
{
int v1; // eax@1
int v2; // ebp@1
int v3; // edi@1
HWND v4; // esi@1
int v5; // eax@6
int v6; // edi@6
int v7; // ebx@6
HRGN v8; // eax@6
HRGN v9; // eax@6
HRGN v10; // eax@6
HRGN v11; // eax@6
int (__cdecl *v12)(unsigned int); // eax@6
int (__cdecl *v13)(unsigned int); // eax@6
int (__cdecl *v14)(unsigned int); // eax@6
int v15; // edi@6
int v16; // ebx@6
int v17; // edi@6
int v18; // eax@6
int v19; // edx@6
DWORD v20; // eax@6
int v21; // edi@7
int v22; // eax@8
HBRUSH v23; // ecx@9
int v24; // ST1C_4@11
int v25; // ST18_4@11
int v26; // ebx@15
int v27; // edi@15
int v28; // eax@16
int i; // ebx@17
int v30; // eax@18
HRGN v31; // eax@20
int v32; // eax@21
int v33; // ebx@21
int v34; // edi@21
int v35; // edi@26
unsigned __int8 v36; // sf@26
unsigned __int8 v37; // of@26
int v38; // eax@28
int v39; // ebx@36
int v40; // eax@38
int v41; // edi@40
int v42; // eax@40
int v43; // ebx@45
int v44; // edi@45
LONG v45; // ebp@51
int v46; // eax@51
HRGN v47; // eax@54
int v48; // ecx@58
unsigned __int8 v49; // sf@59
unsigned __int8 v50; // of@59
int v51; // ebx@61
int v52; // ebx@66
int v53; // edi@67
int v54; // eax@69
int v55; // ST10_4@69
int v56; // edi@69
int v57; // ebx@73
int v58; // edi@74
int v59; // eax@76
int v60; // ST0C_4@76
int v61; // edi@76
int v62; // edi@78
int v63; // ebp@82
LONG v64; // ecx@84
int v65; // eax@84
int v66; // eax@85
int v67; // ecx@86
void *v68; // eax@92
unsigned __int8 v69; // sf@94
unsigned __int8 v70; // of@94
int v71; // ebx@96
signed int v72; // ebp@96
int v73; // edi@96
LONG v74; // edx@96
int v75; // eax@96
int v76; // eax@97
int v77; // eax@98
int v78; // eax@98
int v79; // eax@99
int v80; // eax@100
int v81; // eax@100
int v82; // eax@102
int v83; // ecx@102
unsigned __int8 v84; // sf@106
unsigned __int8 v85; // of@106
int *v86; // eax@111
HRGN v87; // eax@119
int v88; // eax@123
unsigned __int8 v89; // sf@123
unsigned __int8 v90; // of@123
unsigned __int8 v91; // zf@127
char v92; // sf@127
unsigned __int8 v93; // of@127
int v94; // eax@135
HBRUSH v95; // eax@136
char v97; // [sp+0h] [bp-288h]@29
int v98; // [sp+10h] [bp-278h]@6
RECT rect; // [sp+14h] [bp-274h]@6
int v100; // [sp+24h] [bp-264h]@21
int v101; // [sp+28h] [bp-260h]@6
int v102; // [sp+2Ch] [bp-25Ch]@21
int x; // [sp+30h] [bp-258h]@36
int v104; // [sp+34h] [bp-254h]@36
int v105; // [sp+38h] [bp-250h]@6
int v106; // [sp+3Ch] [bp-24Ch]@6
int y; // [sp+40h] [bp-248h]@6
int v108; // [sp+44h] [bp-244h]@6
int (**v109)(); // [sp+48h] [bp-240h]@6
int v110; // [sp+4Ch] [bp-23Ch]@6
int v111; // [sp+50h] [bp-238h]@1
int v112; // [sp+54h] [bp-234h]@6
int v113; // [sp+58h] [bp-230h]@6
int v114; // [sp+5Ch] [bp-22Ch]@84
int v115; // [sp+60h] [bp-228h]@90
int v116; // [sp+64h] [bp-224h]@6
int (**v117)(); // [sp+68h] [bp-220h]@6
HRGN hrgnDst; // [sp+6Ch] [bp-21Ch]@6
int v119; // [sp+70h] [bp-218h]@102
struct tagPOINT pt; // [sp+74h] [bp-214h]@6
int v121; // [sp+7Ch] [bp-20Ch]@6
int v122; // [sp+80h] [bp-208h]@6
int v123; // [sp+84h] [bp-204h]@96
int v124; // [sp+88h] [bp-200h]@78
int v125; // [sp+8Ch] [bp-1FCh]@85
int (**v126)(); // [sp+90h] [bp-1F8h]@6
HGDIOBJ h; // [sp+94h] [bp-1F4h]@6
struct tagRECT Rect; // [sp+98h] [bp-1F0h]@6
int k; // [sp+A8h] [bp-1E0h]@69
int j; // [sp+ACh] [bp-1DCh]@66
int *v131; // [sp+B0h] [bp-1D8h]@6
int (**v132)(); // [sp+B4h] [bp-1D4h]@6
int v133; // [sp+BCh] [bp-1CCh]@6
HDC hDC; // [sp+C0h] [bp-1C8h]@11
HDC hdc; // [sp+C4h] [bp-1C4h]@6
int (**v136)(); // [sp+110h] [bp-178h]@34
struct tagRECT rcDst; // [sp+118h] [bp-170h]@6
RECT rcSrc1; // [sp+128h] [bp-160h]@6
int (**v139)(); // [sp+138h] [bp-150h]@36
int v140; // [sp+140h] [bp-148h]@101
int v141; // [sp+144h] [bp-144h]@6
int (**v142)(); // [sp+148h] [bp-140h]@6
int v143; // [sp+14Ch] [bp-13Ch]@6
int (**v144)(); // [sp+150h] [bp-138h]@6
int v145; // [sp+154h] [bp-134h]@6
int v146; // [sp+158h] [bp-130h]@58
int (**v147)(); // [sp+15Ch] [bp-12Ch]@6
int v148; // [sp+160h] [bp-128h]@6
int v149; // [sp+164h] [bp-124h]@6
int v150; // [sp+168h] [bp-120h]@6
int v151; // [sp+16Ch] [bp-11Ch]@6
int v152; // [sp+170h] [bp-118h]@6
int (**v153)(); // [sp+174h] [bp-114h]@20
int v154; // [sp+17Ch] [bp-10Ch]@6
int v155; // [sp+180h] [bp-108h]@6
int v156; // [sp+184h] [bp-104h]@6
int v157; // [sp+188h] [bp-100h]@6
int v158; // [sp+18Ch] [bp-FCh]@6
int v159; // [sp+190h] [bp-F8h]@6
int v160; // [sp+194h] [bp-F4h]@6
RECT rcSrc2; // [sp+198h] [bp-F0h]@96
char v162; // [sp+1A8h] [bp-E0h]@134
LONG v163; // [sp+1ACh] [bp-DCh]@84
int v164; // [sp+1B0h] [bp-D8h]@6
LONG v165; // [sp+1B4h] [bp-D4h]@1
LONG v166; // [sp+1B8h] [bp-D0h]@6
int v167; // [sp+1BCh] [bp-CCh]@6
int v168; // [sp+1C0h] [bp-C8h]@6
int (**v169)(); // [sp+1C4h] [bp-C4h]@134
LONG v170; // [sp+1CCh] [bp-BCh]@28
LONG v171; // [sp+1D0h] [bp-B8h]@28
LONG v172; // [sp+1D4h] [bp-B4h]@28
LONG v173; // [sp+1D8h] [bp-B0h]@28
RECT rc; // [sp+1DCh] [bp-ACh]@28
char v175; // [sp+1ECh] [bp-9Ch]@6
int v176; // [sp+228h] [bp-60h]@36
int v177; // [sp+230h] [bp-58h]@55
int v178; // [sp+238h] [bp-50h]@36
int v179; // [sp+240h] [bp-48h]@41
CHAR Src; // [sp+248h] [bp-40h]@55
int v181; // [sp+284h] [bp-4h]@1

v4 = this;
CPaintDC__CPaintDC(this);
v2 = 0;
v181 = 0;
sub_473E89((LPRECT)&v165);
v1 = sub_42C2D0(v4);
v3 = v1;
v111 = v1;
if ( v1 && sub_429560(v1) && sub_4295A0(v3) )
{
if ( *((_DWORD *)v4 + 275) )
sub_42DE30(v4);
v158 = sub_42C260(v4);
sub_42C270(0);
sub_43D650(&v133, *((_DWORD *)v4 + 22), *((_DWORD *)v4 + 23));
sub_42BD30(&v133);
pt.y = v166;
v121 = v167;
pt.x = v165;
LOBYTE(v181) = 2;
v122 = v168;
DPtoLP(hdc, &pt, 2);
GetClientRect(*((HWND *)v4 + 7), &Rect);
DPtoLP(hdc, (LPPOINT)&Rect, 2);
rcDst.left = Rect.left;
rcSrc1.left = Rect.left;
rcDst.top = Rect.top;
rcSrc1.top = Rect.top;
rcDst.right = Rect.right;
rcDst.bottom = Rect.bottom;
rcSrc1.right = Rect.right;
rcSrc1.bottom = Rect.bottom;
v5 = sub_42DD80(&v132);
v6 = *(_DWORD *)v5;
v7 = *(_DWORD *)(v5 + 4);
Rect.left += *(_DWORD *)v5;
Rect.top += v7;
IntersectRect(&Rect, &Rect, (const RECT *)&pt);
rect.left = Rect.left;
rect.top = Rect.top;
rect.right = Rect.right;
rect.bottom = Rect.bottom;
LPtoDP(hdc, (LPPOINT)&rect, 2);
v143 = 0;
v142 = &off_55BA3C;
LOBYTE(v181) = 3;
v8 = CreateRectRgnIndirect(&rect);
sub_474418(v8);
rcDst.left += v6;
IntersectRect(&rcDst, &rcDst, (const RECT *)&pt);
rect.top = rcDst.top;
rect.right = rcDst.right;
rect.left = rcDst.left;
rect.bottom = rcDst.bottom;
LPtoDP(hdc, (LPPOINT)&rect, 2);
v145 = 0;
v144 = &off_55BA3C;
LOBYTE(v181) = 4;
v9 = CreateRectRgnIndirect(&rect);
sub_474418(v9);
rcSrc1.top += v7;
IntersectRect(&rcSrc1, &rcSrc1, (const RECT *)&pt);
rect.top = rcSrc1.top;
rect.right = rcSrc1.right;
rect.left = rcSrc1.left;
rect.bottom = rcSrc1.bottom;
LPtoDP(hdc, (LPPOINT)&rect, 2);
v148 = 0;
v147 = &off_55BA3C;
LOBYTE(v181) = 5;
v10 = CreateRectRgnIndirect(&rect);
sub_474418(v10);
hrgnDst = 0;
v117 = &off_55BA3C;
v110 = 0;
v109 = &off_55BA3C;
LOBYTE(v181) = 7;
v11 = CreateRectRgnIndirect((const RECT *)&v165);
sub_474418(v11);
v12 = (int (__cdecl *)(unsigned int))GetCurrentObject(hdc, 6u);
v159 = sub_474403(v12);
v13 = (int (__cdecl *)(unsigned int))GetCurrentObject(hdc, 1u);
v160 = sub_474403(v13);
v14 = (int (__cdecl *)(unsigned int))GetCurrentObject(hdc, 2u);
v164 = sub_474403(v14);
sub_473B48(1);
v15 = v111;
v141 = (*((_DWORD *)v4 + 17) >> 1) & 1;
v116 = sub_429560(v111);
v16 = sub_429620(v15);
v113 = v16;
v108 = sub_4295A0(v15);
v17 = sub_429630(v15);
v105 = v17;
v101 = v16 + sub_47093A(1);
v98 = v17 + sub_47093A(0);
v18 = sub_42BF20(&v132);
v106 = *(_DWORD *)v18;
v19 = *(_DWORD *)(v18 + 4);
h = 0;
y = v19;
v126 = &off_490DF8;
LOBYTE(v181) = 8;
sub_42C320(&v126);
v20 = GetSysColor(15);
CBrush__CBrush(v20);
LOBYTE(v181) = 9;
CPen__CPen(0, 0, 0xFFFFFFu);
LOBYTE(v181) = 10;
CPen__CPen(0, 0, 0x808080u);
LOBYTE(v181) = 11;
CPen__CPen(0, 0, 0);
v149 = 0;
v151 = 0;
v150 = 0;
v152 = 5;
v154 = 0;
v156 = 0;
v155 = 0;
v157 = 5;
LOBYTE(v181) = 14;
sub_42B2A0(&v175);
v131 = off_57071C;
LOBYTE(v181) = 16;
v112 = 1;
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
BYTE的值我可以读到,问题转换不成规则文档
wuyq11 2010-10-15
  • 打赏
  • 举报
回复
byte[] buffer= System.IO.File.ReadAllBytes(@"a.dat");

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧