n.BytesOf();
TBytes/TByteDynArray > String
Caption = System::Sysutils::StringOf(barr);
Caption =
System::Sysutils::WideStringOf(barr);
String >
TBytes bytes;
bytes = TEncoding::UTF8->GetBytes(Memo1->Text);
Memo1->Text = TEncoding::UTF8->GetString(bytes);
delphi
TEncoding.UTF8.GetBytes
TBytes/TByteDynArray > Byte *
TBytes bytes;
Byte * bt = &bytes[0];
byte bb[255];
或者
bt = new Byte[bytes.Length];
memcpy(bt,&bytes[0],bytes.Length);
Byte * >TBytes/TByteDynArray
Byte * bt;
TBytes bytes;
bytes = BytesOf(bt, sizeof(bt));
UnicodeString s1
;
s1
= 'Hello World!';
s1.
Length(),
ByteLength(s1)
ByteLength
TIdBytes
TIdBytes = array of Byte;
TBytes = TArray;
uses IdGlobal;//head file
TIdBytes>String
String
str=BytesToString( AValue: TIdBytes);
TIdBytes>TBytes
BytesToRaw(Buffer,abuffer,Length(Buffer));
SetLength(bs,0);
SetLength(bs,Length(idbs));
BytesToRaw(idbs,bs,Length(idbs));//error
BytesToRaw(idbs,bs[0],Length(idbs));//ok
buf :=TBytes( idbus);//ok
TBytes>TIdBytes
function RawToBytes(const AValue; const ASize: Integer):
TIdBytes;
idbs := RawToBytes(bs[0], Length(bs));//必须加下标0,否则就是错是
idbs := RawToBytes(bs, Length(bs));//没有下标0是错的
结构体>TIdBytes
RawToBytes(SendData,SizeOf(SendData));//SendData是结构体变量,不要下标0
UTF8String Bytes>UnicodeString
字节转换为16进制
idbytes to hexString
String hexstr; for (
int i =
idbytes.Low; i <= idbytes.High; i++
) { hexstr +=
IntToHex(idbytes[i],
2); }
delphi
PAnsiChar数组转为字符串
R: array[0..19] of AnsiChar;
sss:ansistring;
astr := AnsiString(r);
StrPCopy(r,astr);
Delphi7升级
AnsiChar(DelphiXE10)= Char(Delpih7)
Delphi7:
Object: array[1..6] of Char;
DelphiXE10,Berlin
Object: array[1..6] of AnsiChar;
sbytes := VarArrayOf([$AA, $EE, $81, $0, $0, $0, $0,
$0, $0, $0, $0, $0, $0, $0, $0, $0]);
AnsiString>Bytes>AnsiString
bsa := TEncoding.ANSI.GetBytes(as1);
as1:= TEncoding.ANSI.GetString(bsa);
假UTF8Sring转换为汉字
UTF8String s8='闫换珍';
AnsiString s8a='闫换珍';
都是6个字节,一个汉字2个字节。

此时,想还原汉字this->Caption=???如何才能显示汉字

AnsiString as21 = s8;
//err AnsiString
as22 = AnsiString(s8);
//err AnsiString
as2 = s8.c_str();
//ok String
s991 = s8;
//err String s992 =
String(s8);
//err String s99 =
s8.c_str();
//ok 最可靠
as1:= TEncoding.ANSI.GetString(bs8);//ok
真UTF8String
UTF8String
s8=L'闫换珍';//加上L标识才是真正的UTF8,一个汉字3个字节,UnicodeString函数是2个字节。
AnsiString s8a='闫换珍';
TBytes bs81 =TEncoding::UTF8->GetBytes(s8);
TBytes bs82 =TEncoding::UTF8->GetBytes(s8a);
两个bytes里是相等的,正确的。
char dest[256] = {0}; // room for 256
characters
UnicodeString src = L'闫换珍';
UnicodeToUtf8(dest, src.c_str(), 256);
//或者
UnicodeToUtf8(dest,256, src.c_str(), src.Length*();
dest与bs81,bs82值相等。
RawByteString srbRaw;
srbRaw = UTF8Encode(ss);
//ss = UTF8Decode(srb);
char
Buf[512] = {0
};
strcpy(Buf, srbRaw.c_str());
Buf这个也是正确的utf8字节
UTF8String>String
String
s=s8;
UnicodeString us1 =s8;
UnicodeString us11 =
UTF8ToUnicodeString(s8.c_str());
UnicodeString us13 =
UTF8ToString(s8.c_str());
UnicodeString us14 = Utf8ToAnsi(s8);
RawByteString rbs1 = AnsiToUtf8(s8);
word/short/int 简单类型转换为bytes
var
Buf:TBytes;
w:Word;
begin
w:=10;
Buf:=RawToBytes(w);
end;
var
Buf:Array[0..1]
of
Byte;
w:Word;
begin
w:=10;
Move(w,Buf[0],2);
end;
doule>Byte[]
byte bt[8];
double ad;
memcpy(&bt[0], (byte*)&ad, 8);
memcpy(&bt[0], (byte*)&ajava, sizeof(double));
#if defined(USE_ENCODING)
TBytes
FirstLine; // A dynamic array of
bytes FirstLine.Length =
512;
stream =
_wfopen(OpenDialog1->Files->Strings[I].c_str(),
L
'r');
fgets(&FirstLine[
0],
FirstLine.Length, stream);
Memo1->Lines->Append(TEncoding::UTF8->
GetString(FirstLine));
fclose(stream); #else char
FirstLine[
512]; stream =
_wfopen(OpenDialog1->Files->Strings[I].c_str(),
L
'r');
fgets(FirstLine, sizeof(FirstLine),
stream);
Memo1->Lines->
Append(UTF8String(FirstLine));
fclose(stream); #endif
delphi
LBuffer:
TBytes;
SetLength(LBuffer,
LFileStream.Size);
LFileStream.ReadBuffer(Pointer(LBuffer)^,
Length(LBuffer));
C++builder VCL String
String astr='hello';
astr[0]//error,下标正确的是从1开始
StringToOleStr
字符串函数
String ss;
ss.LastDelimiter(' ');
最后一个空格出现的位置,这样就不用循环了
BSTR
bs1;
fun(BSTR *name);
fun(&bs1);
Delphi Berlin 有此函数,int转换为16进制
ai:Integer;
ai:=17;
self.Caption:=ai.ToHexString;
StringList>字符数组
arr:TArray;
list:TStringList;
arr := list.ToStringArray;
TStringDynArray
TMemoryStream>TBytes
LResponse: TMemoryStream;
unsigned char *>AnsiString
AnsiString str1= (char *)buff;
AnsiString str2((const char *)buff);
AnsiString>unsigned char*
strcpy(uchar,AnsiString(str).c.str());
ascii码转16进制
String Asc2Hex(String astr) { TBytes bytes; bytes =
TEncoding::ASCII->
GetBytes(astr); String hexstr;
for (
int i = bytes.Low; i <=
bytes.High; i++
) { hexstr += IntToHex(bytes[i],
2); } return hexstr;
}
String Hex2Asc(String hexStr) { int nLen
=
hexStr.Length(); int j =
0; String ahex; char
achar; String retstr; if (
0
!= (nLen %
2)) { return
-
1; } for (
int
i =
1; i < nLen; i = i +
2, j++
)
{ ahex = hexStr.SubString(i,
2);
ahex =
'0x' +
ahex; achar =
char(ahex.ToInt());
retstr = retstr +
achar; } return
retstr; }