Dize uzun süre C cinsinden ayrıştırma

Python'da bir sunucu ve C'deki müşteri yazdım.

Python sunucusu, yani C istemciye "1 1000 \ n" gönderir.

Bu dizgeyi alan C işlevi onu iki uzun int'ye ayırmalıdır.

void receive_job() {
 char tmp_buffer[256];
 long start, stop;
 recv(sock, tmp_buffer, 255, 0);
 /*
 here I wonder how I can parse tmp_buffer to set start and stop values.
 */
}

C konusunda çok bilgili değilim, bu yüzden bu konuda bir yorumunu takdir ediyorum.

0

4 cevap

Beton veri tipinize bağlı olarak, strtol() veya strtoul() 'ye bir göz atın:

char end;
long x = strtol(tmp_buffer,&end,10);
long y = strtol(end+1,NULL,10);
5
katma

strtol adresini kullanın.

char data[] = "1 1000\n";
char *next, *err;
long a = strtol(data, &next, 10);
long b = strtol(next, &err, 10);
4
katma
Teşekkürler, bu da işe yarıyor ama sscanf'ı tercih ettim :)
katma yazar Dog eat cat world, kaynak

sscanf manual sayfasına bakın - ancak dönüş değerini kontrol edin!

2
katma
Teşekkürler! İhtiyacım olan bu!
katma yazar Dog eat cat world, kaynak

recv 'i çağırmadan önce memset ' i kullanarak tmp_buffer 'ı veya en azından boş bir bayt eklemek için temizlemek daha iyidir. Aksi takdirde, yanlış bir şey iletilirse ayrıştırabileceğiniz çöp içerecektir.

1
katma
teşekkürler, şu anda sscanf'ı "% ld% ld \ n" ifadesiyle kullanıyorum, bu yüzden tmp_buffer dosyasını silmenin gerekli olmadığını düşünüyorum.
katma yazar Dog eat cat world, kaynak