Tag: 铸造

错误 – 无效* – 未知大小

我从第三方收到的这个函数包含以下代码,它不能在MS Visual Studio 10中编译。我认为有一个转换问题,但不知道如何解决这个问题。 void dump_ffmpeg_pad16(FILE *stream, uint32_t timestamp, void *data, int data_size) { unsigned int z=0; void *end = data + data_size; while (data < end) { z = *(unsigned short*)data; fwrite(((char*)(&z)), 3, 1, stream); data += 2; } } 已经指示他们帮助编译为C ++代码。 谢谢你的帮助。

为什么这个显式演员的结果与隐式演员的结果不同?

为什么这个显式演员的结果与隐式演员的结果不同? #include double a; double b; double c; long d; double e; int main() { a = 1.0; b = 2.0; c = .1; d = (b – a + c) / c; printf(“%li\n”, d); // 10 e = (b – a + c) / c; d = (long) e; printf(“%li\n”, d); // 11 } […]

如何正确地将unsigned char数组转换为uint32_t

所以,我正在尝试将unsigned char的数组转换为uint32_t ,但每次都会得到不同的结果: unsigned char buffer[] = {0x80, 0x00, 0x00, 0x00};; uint32_t num = (uint32_t*)&buffer; 现在,我一直收到这个警告: 警告:初始化从指针生成整数而不进行强制转换 当我将num更改为*num我没有得到那个警告,但这实际上并不是真正的问题( 更新:嗯,现在我认为它们可能是相关的。),因为每次运行代码都有不同结果 。 其次,一旦它正确投射,它应该是128 ,但是如果我需要改变缓冲区的字节顺序,我可以设法自己做, 我想 。 谢谢!

-1.0和1.0之间的双倍精度是多少?

在我看过的一些音频库中,音频样本通常表示为double或float,范围为-1.0到1.0。 在某些情况下,这很容易让分析和综合代码抽象出底层数据类型实际可能是什么(签名long int,unsigned char等)。 假设IEEE 754,我们的密度不均匀。 随着数量接近零,密度增加。 这意味着我们对接近-1和1的数字的精度较低。 如果我们可以为我们要转换的基础数据类型表示足够数量的值,则此非均匀数密度无关紧要。 例如,如果底层数据类型是unsigned char,我们只需要介于-1和1(或8位)之间的256个值 – 使用double显然不是问题。 我的问题是:我有多少精度? 我可以安全地转换为32位整数,而不会丢失吗? 为了扩展这个问题,在没有丢失的情况下,安全地转换为32位整数/从32位整数转换的值必须是多少? 谢谢!

从sockaddr *转换为sockaddr_in *增加了所需的对齐

当我使用一些看起来像的代码时,编译器会产生这个警告。 …. for(p = res; p != NULL; p = p->ai_next) { void *addr; std::string ipVer = “IPv0”; if(p->ai_family == AF_INET) { ipVer = “IPv4”; struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; addr = &(ipv4->sin_addr); } else { ipVer = “IPv6”; struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr; addr = &(ipv6->sin6_addr); } …. } 其中p […]

将MD5结果转换为C中的整数

我的目标是使用MD5结果的结果来索引哈希表。 我想对它执行Modulo操作以在表中找到适当的插槽。 我已经尝试将它作为无符号长长型投射。 当我打印结果时,我每次都得到一个不同的数字用于相同的MD5哈希。 MD5哈希最初是unsigned char *。 有人能告诉我我做错了什么吗? 这是我的function: int get_fp_slot(unsigned char * fingerprint, int size) { return (unsigned long long)fingerprint % size; }

输入void void *(*)(void *)为void(*)(void)

作为赋值的一部分,我试图创建一个像pthreads这样的用户级线程库。 为了处理线程之间的上下文切换,我使用’swapcontext’函数。 在使用它之前,我必须使用’makecontext’函数创建一个上下文。 ‘makecontext’需要一个返回类型为void且参数类型为(void)的函数指针。 然而,线程函数必须是void* thread_func (void*) 有没有办法进行类型转换? 或者是否有其他方法在用户级别进行上下文切换?

将int转换为在C中浮动时的奇怪行为

我对以下C程序的输出有疑问。 我尝试使用Visual C ++ 6.0和MinGW32(gcc 3.4.2)编译它。 #include int main() { int x = 2147483647; printf(“%f\n”, (float)2147483647); printf(“%f\n”, (float)x); return 0; } 输出是: 2147483648.000000 2147483647.000000 我的问题是:为什么两条线都不同? 将整数值2147483647转换为IEEE 754浮点格式时,它将近似为2147483648.0。 所以,我预计这两行都将等于2147483648.000000。 编辑 :值“2147483647.000000”不能是单精度浮点值,因为数字2147483647无法精确表示IEEE 754单精度浮点格式而不会丢失精度。

从字符串中获取整数

我在从字符串中获取整数并使用它时遇到麻烦。 我有: char *string = “I 17 24 flying bits”; 我想把17和24作为整数并使用它们。 指针转换是不可能的,我如何获得这些整数并使用它们?

将long long转换为C中的字符串?

我想将长long转换为C中的字符串。 long long x = 999; 我想将x转换为字符串。 我该怎么做呢? 谢谢。