c++builder字节编码转换⼤全StringTBytesbyte System.SysUtils
System::DynamicArray<System::WideChar> TCharArray
System::TArray__1<System::WideChar> TCharArray;
TCharArray
String TBytes byte
编码类型有:ASCII、8BIT、7BIT、UCS2-BIG、UCS2-LIT、UCS2-80、UCS2-81、UCS2-82、UTF-8、UTF-16(Unicode) RawToBytes
BytesToRaw
Byte⼀个字节,能存放0..255,就是unsigned char,⼩写的byte等价于⼤写的Byte。
array
TByteDynArray= array of Byte;
TIdBytes= array of Byte;
typedef System::DynamicArray<System::Byte> TIdBytes;
typedef System::DynamicArray<System::Byte> TBytes;
动态数组的写法
DynamicArray<Byte> TBytes;
DynamicArray<int> TInts;
Bytes数组>Ascii字符串
bts:tbytes;
str := TEncoding.ASCII.GetString(bts);
TBytes = TArray<Byte>;
for var I := 0 to 15 do
begin
sCardData :=  sCardData+  char(  bts[i])  ;//bts[i].ToHexString
end;
String> TBytes/TByteDynArray
Text.BytesOf()
BytesOf
WideBytesOf()
TBytes bv;
bv.set_length(8);
bytes=System::Sysutils::BytesOf(Caption);
bytes=System::Sysutils::WideBytesOf(Caption);//value is spec wide
bytes=Caption.BytesOf();
TBytes/TByteDynArray > String
Caption = System::Sysutils::StringOf(barr);
Caption = System::Sysutils::WideStringOf(barr);
String > <Utf8Bytes
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);
TBytes初始化memset
TBytes bv;
bv.set_length(5000);
memset(    &bv[0], 0,bv.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<Byte>;
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);
字符串转数组char
#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开始

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。