我有一個需要序列int, double, long, and float
成字符緩衝區,這是我目前做的方式
如何數字數據序列轉換成char *
int value = 42;
char* data = new char[64];
std::sprintf(data, "%d", value);
// check
printf("%s\n", data);
首先我不知道這是否是最好的這樣做的方式,但我的直接問題是確定緩衝區的大小。
這種情況下的數字64完全是任意的。 如何知道傳遞的數字的確切大小,以便我可以分配確切的內存;不是更多不少於需要?
C或C++解決方案都可以。
編輯
基於約翰回答(分配足夠大的緩衝區。)下面,我想這樣做
char *data = 0;
int value = 42;
char buffer[999];
std::sprintf(buffer, "%d", value);
data = new char[strlen(buffer)+1];
memcpy(data,buffer,strlen(buffer)+1);
printf("%s\n", data);
在速度的代價或許是避免了浪費。並沒有完全解決潛在的溢出
或者我可以只使用足以代表該類型的最大值。
它看起來不是標準函數,而是'asprintf',如果可用,看起來好像可以很好地解決您的問題。 – icktoofay
@Bala:這會給你在內存中的大小*,他詢問sprintf給出的輸出大小以分配足夠大的緩衝區。 –
你真的想要從字面上序列化數字數據嗎?至少你可以存儲精確的二進制值,也許是Base64編碼的。這也有一定的規模。 –