Tag: 序列化

结构填充在C结构序列化中的影响(保存到文件)

我在C中有以下结构: typedef struct sUser { char name[nameSize]; char nickname[nicknameSize]; char mail[mailSize]; char address[addressSize]; char password[passwordSize]; int totalPoints; PlacesHistory history; DynamicArray requests; }User; typedef struct sPlacesHistory { HistoryElement array[HistorySize]; int occupied; int last; }PlacesHistory; 和function: void serializeUser( User * user, FILE * fp ) { fwrite( user, nameSize + nicknameSize + mailSize + addressSize + passwordSize […]

C树XML序列化

我正在尝试递归循环遍历树结构并使用(语言)C将其序列化为字符串。当涉及到C(来自Java,C#,动作脚本背景)时,我是一个真正的新手。一般来说,我很难掌握一些东西。 我应该使用库来帮助生成XML吗? 如何使用C实现递归? 谢谢

如何在网络上进行浮点数的序列化?

我发现了一段代码来对网络上的浮点数进行序列化。 uint32_t htonf(float f) { uint32_t p; uint32_t sign; if (f < 0) { sign = 1; f = -f; } else { sign = 0; } p = ((((uint32_t)f)&0x7fff)<<16) | (sign<<31); // whole part and sign p |= (uint32_t)(((f – (int)f) * 65536.0f))&0xffff; // fraction return p; } 规范:上面的代码是一种天真的实现,它存储一个32位数的浮点数。 高位(31)用于存储数字的符号(“1”表示负数),接下来的7位(30-16)用于存储浮点数的整数部分。 最后,剩余的比特(15-0)用于存储数字的小数部分。 其他人都很好但我无法弄清楚这意味着什么。 这怎么能让我们得到15-0位? 为什么我们需要“* […]

将数据从C传递到Java

在C服务器和Java applet之间传递数据的最佳方法是什么? 目前,它是通过使用缓冲区并使用memcpy将字节复制到它来完成的,但是如果对象发生了变化,我必须查找它被发送到applet的每个实例并将其更改。 有没有更好的方法将对象传递给java? 你会怎么做? 编辑说明:它只是从C服务器到Java applet,没有java servlet。 Applet传递给C服务器的唯一内容是hex数字,表示要采取的操作

Thrift:是否可以只使用C(GLib)Thrift库进行序列化?

我试图使用这个例子,但它总是返回write_len = 10个字节。 ThriftTransport* transport = THRIFT_TRANSPORT( g_object_new(THRIFT_TYPE_MEMORY_BUFFER, “buf_size”, 8096, NULL)); ThriftProtocol* protocol = THRIFT_PROTOCOL( g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, “transport”, transport, NULL)); Exception* src = g_object_new(TYPE_EXCEPTION, NULL); ExceptionClass* cls = EXCEPTION_GET_CLASS(src); g_object_set(src, “ex_sign”, exception_signature, “cl_sign”, class_signature, “caught”, catch_method != NULL, NULL); int write_len = THRIFT_STRUCT_CLASS(cls)->write(THRIFT_STRUCT(src), protocol, &error);

什么是java.io.Serializable的C / C ++等价?

什么是java.io.Serializable的C / C ++等价? 有关序列化库的参考: 用C语言序列化数据结构 还有: http://troydhanson.github.io/tpl/index.html http://www.boost.org/doc/libs/1_41_0/libs/serialization/doc/index.html https://developers.google.com/protocol-buffers/docs/cpptutorial#optimization-tips 但这样的等价甚至存在吗? 因此,如果我在Java中有如下的抽象类,那么C / C ++中的可序列化类如何? import java.io.Serializable; public interface SuperMan extends Serializable{ /** * Count the number of abilities. * @return */ public int countAbility(); /** * Get the ability with index k. * @param k * @return */ public long getAbility(int k); /** * […]

如何在C中读取可变长度的UDP数据包

我正在通过UDP发送一个C结构 struct packet{ int numInt; int* intList; //malloc’ed as (sizeof(int)*numInt) } 它将被序列化为[numInt][intList[0]]…[intList[numInt-1]] 。 我的理解是,在UDP上调用recvfrom将读取整个数据包,即使缓冲区不包含那么多字节。 使用一个非常大的缓冲区我唯一的选择?

如何序列化GMP mpf类型?

似乎GMP只提供了mpf(浮点)类型的字符串序列化: mpf_get_str() , mpf_class::get_str() mpz(整数)类型具有原始字节的附加接口: mpz_out_raw() http://gmplib.org/manual/Function-Index.html 我错过了什么吗? 有谁知道可以序列化GMP浮标的另一个库? 有谁知道另一个提供强大序列化的bignum lib? 编辑:我很高兴序列化MPFR的mpfr_t,同样似乎只提供字符串输出: http ://www.mpfr.org/mpfr-current/mpfr.html#Function-Index

为什么IEEE-754浮点数不能在平台之间交换?

已经断言 (甚至考虑字节字节序)IEEE754浮点并不保证在平台之间可以交换。 所以: 理论上,为什么IEEE浮点不能在平台之间交换? 这些问题是否适用于现代硬件平台(例如i686,x64,arm)? 如果问题是有效的,你能否请举例说明这种情况(首选C或C ++)? 动机:一些GPS 制造商在“符合IEEE-754标准的浮点值”中交换(例如)纬度,经度和原始数据的二进制格式。 因此,我无法控制选择文本格式或其他“便携式”格式。 因此,我的问题是,差异可能会或可能不会发生。

在ruby进程之间使用大型数据对象

如果使用Marshal.dump写入文件,我有一个大约10兆字节的Ruby哈希。 在gzip压缩之后它大约是500千字节。 迭代和更改此哈希在ruby中非常快(毫秒的分数)。 即使复制它也非常快。 问题是我需要在Ruby on Rails进程之间共享此哈希中的数据。 为了使用Rails缓存(file_store或memcached)执行此操作,我首先需要Marshal.dump文件,但是在序列化文件时会产生1000毫秒的延迟,在序列化时会产生400毫秒的延迟。 理想情况下,我希望能够在100毫秒内从每个进程保存和加载此哈希。 一个想法是生成一个新的Ruby进程来保存这个哈希,为其他进程提供API来修改或处理其中的数据,但我想避免这样做,除非我确定没有其他方法可以共享这个对象很快。 有没有一种方法可以更直接地在进程之间共享此哈希,而无需序列化或反序列化它? 这是我用来生成类似于我正在使用的哈希的代码: @a = [] 0.upto(500) do |r| @a[r] = [] 0.upto(10_000) do |c| if rand(10) == 0 @a[r][c] = 1 # 10% chance of being 1 else @a[r][c] = 0 end end end @c = Marshal.dump(@a) # 1000 milliseconds Marshal.load(@c) # 400 milliseconds 更新: […]