2016-04-04 16 views
0

dönüştürme char.İkili ben ikili haline kömürü dönüştürmek için aşağıdaki kodu kullanabilirsiniz, ben bir char bir ikili sayı dönüştürmek çalışıyorlar c

Sorun şu ki, nasıl geri alacağımı bilmiyorum, bu ikili sayıyı almak ve onu ilk karaktere dönüştürmek istiyorum. Folliwing kodunu kullanıyorum ama çekirdek bir problem yaratıyor.

exaple için
char subbuff[9]; 
memcpy(subbuff, &fichero[0], 8); 
subbuff[8] = '\0'; 


for(int k=8;k<fichero_len;k+=8){   

    char c = strtol(subbuff, 0, 2); 
    printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c); 
    memcpy(subbuff, &fichero[k], k+8); 
    subbuff[8] = '\0'; 

} 

dize hola "" ilk kod "00010110111101100011011010000110"

gösterir ama ikinci kodun içine koymak dönüştürmek edin:

const char *hola="00010110111101100011011010000110"; 
char subbuff[16]; 
memcpy(subbuff, hola[0], 8); 
subbuff[8] = '\0'; 


for(int k=8;k<strlen(hola);k+=8){ 
    char c = strtol(subbuff, 0, 2); 
    printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c); 
    memcpy(subbuff, &hola[k], k+8); 
    subbuff[8] = '\0'; 

} 

bir ana sorunu oluşturur

+0

bir [MCVE] gösteriniz (http://stackoverflow.com/help/mcve). –

+0

En az 16 baytlık bir kopyayı "char subbuff [9]" dizinine kopyalıyorsunuz. –

cevap

3

DÜZENLEME 1:

Bir problem başka bir segfault neden olacaktır

memcpy(subbuff, hola[0], 8); 

ile memcpy kötü bir işaretçi geçmesi olduğunu sen

memcpy(subbuff, &fichero[k], k+8); 

ile subbuff içine çok fazla bayt kopyalama olmasıdır. Lütfen derleyici uyarılarını etkinleştirin.

İlk önce, döngü dışında bunu yapmaya bile gerek yoktur. Eğer ile başlayan char geri almazsınız, böylece

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(void) { 
    const char *hola = "01101000011011110110110001100001"; 
    char subbuff[9]; 
    char result [256] = ""; 
    unsigned char c; 
    int k; 
    int index = 0; 
    int fichero_len = (int)strlen(hola); 

    for(k = 0; k < fichero_len; k += 8) {  
     memcpy(subbuff, &hola[k], 8);     // <--- copy 8 butes only 
     subbuff[8] = '\0'; 
     c = (unsigned char)strtol(subbuff, 0, 2); 
     printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c); 
     result[index++] = c; 
     result[index] = '\0'; 
    } 
    printf("Result = %s\n", result); 
    return 0; 
} 

Nihayet biraz dizileri ters böyle benzer yapılabilir! Yukarıdaki koda birkaç satır ekledikten ve hola tanımındaki bitleri tersine çevirdikten sonra, bu çıktının alınmasını sağlayın. Açıkçası, result[]'un yeterince uzun olduğundan emin olmalısınız.

Program çıkışı:

01101000 = h = 104 = 0x68 
01101111 = o = 111 = 0x6F 
01101100 = l = 108 = 0x6C 
01100001 = a = 97 = 0x61 
Result = hola 
+0

aynı hatayı olsun – javimdlt

+0

tamam, şimdi hata olmadan çalışır ama orijinal metin gibi görünmez dediği gibi – javimdlt

+0

Bunun için çıkışlar 0 thru 7 gönderirsiniz, çünkü 0 ile 0 bitlerini göndermeniz gerekir –

İlgili konular