簡體   English   中英

如何在C ++中將字符串轉換為字節數組

[英]How to convert a string into a byte array in C++

我試圖將長度為128bytes的字符串轉換為字節數組。 例如:如果我的字符串是“76ab345fd77 ......”等等。 我想將它轉換為字節數組,因此它應該看起來像{76 ab 34 45 ....}等等,最多64字節。 我寫了下面的代碼,但字節數組總是顯示值為1而不是76 ab ....任何建議我在這里做錯了或者有更好的方法來實現這個:

char* newSign; // It contains "76ab345fd77...."
      int len = strlen(newSign); //len is 128
int num = len/2;
PBYTE bSign;
//Allocate the signature buffer
bSign = (PBYTE)HeapAlloc (GetProcessHeap (), 0, num);
if(NULL == bSign)
{
    wprintf(L"**** memory allocation failed\n");
    return;
}
int i,n;
for(i=0,n=0; n<num ;i=i+2,n++)
{
    bSign[n]=((newSign[i]<<4)||(newSign[i+1]));
    printf("newsign[%d] is %c and newsign[%d] is %c\n",i,newSign[i],i+1,newSign[i+1]);
    printf("bsign[%d] is %x\n",n,bSign[n]);
    //sprintf(bSign,"%02x",()newSign[i]);
}

非常感謝所有的回復。 以下代碼對我有用:

BYTE ascii_to_num(char c)
{
    if ('0' <= c && c <= '9') 
return c - '0'; 
if ('a' <= c && c <= 'f') 
return  c -('a'-('0'+10));
}
for(i=0,n=0; n<num ;i=i+2,n++)
    {
        BYTE a = (ascii_to_num(newSign[i])) & 0x0F;
        BYTE b = ascii_to_num(newSign[i+1]) & 0x0F;
        bSign[n] = (a<<4) | (b);
        printf("bsign[%d] is %x\n",n,bSign[n]);
        }

編碼:

bSign[n]=((newSign[i]<<4)||(newSign[i+1]));

不會將十六進制字符轉換為字節。 另請注意,您需要按位或| 而不是邏輯或||。 對於十進制數字它更像

bSign[n]=(((newSign[i]-'0')<<4)|((newSign[i+1]-'0'));

但你還需要照顧af值。 為此,您需要編寫一個函數來將十六進制字符轉換為值

例如。

int hexToVal(char c)
{
    c = (c | 0x20) - '0';
    if (c<0) error;
    if (c>9) {
        c -= ('a'-('0'+10));
        if (c<10 || c>15) error;
    } 
    return c;
}


   bSign[n]=((hexToVal(newSign[i])<<4)|hexToVal(newSign[i+1]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM