小编Arn*_*ard的帖子

如何从字符串初始化char数组

我想做以下事情

char a[] = { 'A', 'B', 'C', 'D'};
Run Code Online (Sandbox Code Playgroud)

但我不想单独写这些字符.我想要类似的东西

#define S "ABCD"

char a[] = { S[0], S[1], S[2], S[3] };
Run Code Online (Sandbox Code Playgroud)

但这不会编译(gcc说'初始化元素不是常数').

我尝试用#define替换

const char S[] = "ABCD";
Run Code Online (Sandbox Code Playgroud)

但这似乎没有帮助.

我怎么能这样(或类似的东西)让我把"ABCD"写成普通的'字符串',而不是四个单独的字符?

PS似乎人们没有正确地阅读这个问题......

我无法编译以下代码:

const char S[] = "ABCD";
char t[] = { S[0], S[1], S[2], S[3] };
char u[] = { S[3], S[2], S[1], S[0] };
Run Code Online (Sandbox Code Playgroud)

c

15
推荐指数
3
解决办法
10万
查看次数

按位转置8个字节

我在C中寻找一种有效的算法来按位转换8字节的数据.我的意思是,如果我有8个这样的字节:

00011100
00111000
00000001
00000000
11000000
00000000
11111111
01010101
Run Code Online (Sandbox Code Playgroud)

我想获得以下8个字节:

00001010
00001011
01000010
11000011
11000010
10000011
00000010
00100011
Run Code Online (Sandbox Code Playgroud)

由于我想在嵌入式平台上使用它,它应该尽可能快:-)

所有的想法都非常感谢!

c embedded

15
推荐指数
1
解决办法
3763
查看次数

如何过滤Eclipse Outline视图以仅显示函数

我想在CDT中使用Eclipse中的"大纲视图"(因此对于C项目)只显示函数名称.所以没有枚举,包含文件,宏等...

"过滤器..."菜单中有一些选项,但没有一个选项可以仅显示功能.

有谁能够帮我?

eclipse eclipse-cdt

8
推荐指数
2
解决办法
5116
查看次数

为什么这个主筛的实施速度较慢?

我只是尝试了(对我来说)一种新的编程语言:clojure.我写了一个非常天真的"筛子"实现,然后我尝试优化一下.

奇怪的是,虽然(至少对我来说),新的实施并不快,但慢......

任何人都可以提供一些有关为什么这么慢的见解?

我也对如何改进这个算法的其他技巧感兴趣...

最好的祝福,

Arnaud Gouder


; naive sieve. 
(defn sieve
  ([max] (sieve max (range 2 max) 2))
  ([max candidates n]
    (if (> (* n n) max)
      candidates
      (recur max (filter #(or (= % n) (not (= (mod % n) 0))) candidates) (inc n)))))

; Instead of just passing the 'candidates' list, from which I sieve-out the non-primes,
; I also pass a 'primes' list, with the already found primes
; I hoped that this would increase …
Run Code Online (Sandbox Code Playgroud)

primes clojure sieve-of-eratosthenes

7
推荐指数
1
解决办法
468
查看次数

将float转换为unsigned long以访问c #define中的float内部

我想将转换floatunsigned long,同时保持的二进制表示float(所以我希望投5.05!).

这很容易通过以下方式完成:

float f = 2.0;
unsigned long x = *((unsigned long*)&f)
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要在a中做同样的事情#define,因为我想稍后在一些数组初始化中使用它(所以[inline]函数不是一个选项).

这不编译:

#define f2u(f) *((unsigned long*)&f)
Run Code Online (Sandbox Code Playgroud)

如果我这样称呼它:

unsigned long x[] = { f2u(1.0), f2u(2.0), f2u(3.0), ... }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是(逻辑上):

lvalue required as unary ‘&’ operand
Run Code Online (Sandbox Code Playgroud)

注意:下面建议的一个解决方案是union为我的数组使用一个类型.但是,这是没有选择的.我实际上在做以下事情:

#define Calc(x) (((x & 0x7F800000) >> 23) - 127)
unsigned long x[] = { Calc(f2u(1.0)), Calc(f2u(2.0)), Calc(f2u(3.0)), ... }
Run Code Online (Sandbox Code Playgroud)

所以数组真的/必须是类型long[].

c floating-point floating-point-conversion

5
推荐指数
1
解决办法
5075
查看次数