c++builder 字節 編碼 轉換大全 String TBytes byte


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;

 

TBytes = TArray<Byte>;

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);
#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<string>;

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;
}

UnicodeString>std:string

 String at="abc";

std:string sstr = AnsiString(at).c_str();

 

字符串數組

var  arr:TArray<string>;

TStringDynArray 

ArrayOfString2 = array of string;

string2Bytes
String astr = "中國";
TBytes b1,b2,b3,b4;
b1 = TEncoding::UTF8->GetBytes(astr);
b2 = TEncoding::ANSI->GetBytes(astr);
b3 = TEncoding::Default->GetBytes(astr);
b4 = TEncoding::Unicode->GetBytes(astr);
E4B8ADE59BBD
D6D0B9FA
D6D0B9FA
2D4EFD56 高地位修正后:4E2D 56FD ,也有這樣表單\u4e23 \u56fd

String s1,s2,s3,s4;

s1 = TEncoding::UTF8->GetString(b1);//中國
s2 = TEncoding::ANSI->GetString(b2);//中國
s3 = TEncoding::Default->GetString(b3);//中國
s4 = TEncoding::Unicode->GetString(b4);//中國

bytes數組轉換成HexString
String bytesToHex(TBytes data)
{
   String hexstr;
for (int i = 0; i < data.Length; i++)
hexstr+= IntToHex( data[i],2);
return hexstr;
}

特殊漢字
char=13,keypress,
包含key=13:復

包含tab
delphiAnsiChar array 轉換為 tbytes
bts:tbytes;
outbuf: array[0..1000] of AnsiChar;

setlength(bts,200);
Move(bts[0[, outbuf[0], 200);
https://www.cnblogs.com/del88/p/5448317.html
bytesof(str)
stringof(bytes) T

strAnsi:= PAnsiChar(AnsiString(str));

 

TBytes -> PChar :     LPChar :=  PChar(LTBytes);

PChar -> TBytes:LTBytes := BytesOf(LPChar);

TBytes -> Array of AnsiChar:move(LTBytes[i],LArrayOfAnsiChar[k]);

Array of AnsiChar -> string:LString := StringOf(BytesOf(LArrayOfAnsiChar));


https://www.cnblogs.com/keynexy/p/5919962.html
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM