小编Alv*_*ong的帖子

检查编码中是否存在字符

我正在编写一个程序,部件在CP437中呈现位图字体.

在一个呈现文本的函数中我希望能够char在编码转换之前检查CP437中是否有可用的文件,例如:

public static void DrawCharacter(this Graphics g, char c)
{
    if (char_exist_in_encoding(Encoding.GetEncoding(437), c) {
        byte[] src = Encoding.Unicode.GetBytes(c.ToString());
        byte[] dest = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(437), src);
        DrawCharacter(g, dest[0]); // Call the void(this Graphics, byte) overload
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有检查,CP437外的任何字符都将产生'?'(63,0x3F).我想完全隐藏任何无效字符.是否有char_exist_in_encoding 以下愚蠢方法以外的实现?

private static bool char_exist_in_encoding(Encoding e, char c)
{
    if (c == '?')
        return true;
    byte[] src = Encoding.Unicode.GetBytes(c.ToString());
    byte[] dest = Encoding.Convert(Encoding.Unicode, e, src);
    if (dest[0] == 0x3F)
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

也许不是很相关,但位图是这样创建的:

Bitmap b …
Run Code Online (Sandbox Code Playgroud)

.net c# encoding character-encoding

8
推荐指数
1
解决办法
2351
查看次数

循环展开(使用按位运算)

我正在编写Linux内核驱动程序(用于ARM),在irq处理程序中我需要检查中断位.

bit
 0/16  End point 0 In/Out interrupt
       (very likely, while In is more likely)
 1/17  End point 1 In/Out interrupt
 ...
15/31  End point 15 In/Out interrupt
Run Code Online (Sandbox Code Playgroud)

请注意,一次可以设置多个位.

所以这是代码:

int i;
u32 intr = read_interrupt_register();

/* ep0 IN */
if(likely(intr & (1 << 0))){
    handle_ep0_in();
}

/* ep0 OUT */
if(likely(intr & (1 << 16))){
    handle_ep0_out();
}

for(i=1;i<16;++i){
    if(unlikely(intr & (1 << i))){
        handle_ep_in(i);
    }
    if(unlikely(intr & (1 << (i + 16)))){
        handle_ep_out(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

(1 << …

c bit-manipulation linux-kernel loop-unrolling

6
推荐指数
1
解决办法
1540
查看次数

如何使用oob正确nandwrite一个nanddump的转储?

我正在努力在 Linux 中刷新嵌入式设备的先前 ROM 转储。我以前的转储包含 oob 数据。我用 写了它nandwrite -n -N -o /dev/mtd0 backup.bin,然后再次进行 ROM 转储。

通过比较新旧 ROM 转储,我看到了一些无法解释的情况:任何空块(填充 0xFF)的 oob(ecc 字节)的最后 24 个字节也应该是 0xFF,但新 ROM 中的那些dump 填充了 0x00,导致以后的写入失败。

oob 应该是:

FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
Run Code Online (Sandbox Code Playgroud)

但对于nandwrite:

FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF 00000000 00000000
00000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么?


我在nandwrite代码中添加了一个 hack,如果要写入的内容是0xFF,则跳过写入 NAND ,并且它起作用了。那么在尝试将空页写入 NAND 时会出现问题吗?


添加:

现在我在编写引导加载程序映像时也遇到了这个问题。图像不是页面对齐的,所以 …

linux embedded

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

为什么arm-linux-androideabi-gcc会给出iostream错误

我在我的计算机上安装了arm-linux-androideabi-gcc,但是当我尝试编译一个简单的hellow世界时,它会出错(我选择不使用ndk-build).我只想从命令行编译...

#include <iostream>

using namespace std;

int main (){
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

错误:iostream:没有这样的文件或目录

我有arm-linux-androideabi-gcc ~/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin.

我试过包括 -I ~/android-ndk-r7b/platforms/android-9/arch-arm/usr

我也尝试过包括-lstdc++看它是否有效但没有......

./arm-linux-androideabi-g++ -o ff first.cpp -I /home/hari/android-ndk-r7b/platforms/android-9/arch-arm/usr -lstdc++
Run Code Online (Sandbox Code Playgroud)

linker android gcc arm

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

我如何连接两个具有相同基类的不同 list&lt;T&gt; ?

我有一个类ItemChange<T>,看起来像这样:

public class ItemChange<T> where T : MyBase
{
    public DateTime When { get; set; }
    public string Who { get; set; }
    public T NewState;
    public T OldState;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它存储了一个对象的两个副本(NewState和OldState)。我用它来比较字段变化。

我现在正在尝试让它工作,我获得跨多个对象的更改列表,然后将几种不同类型的 T 列表连接到一个数组中,如下所示(注意:两者Object1都Object2源自MyBase:

public IEnumerable<ItemChange<T>> GetChangeHistory<T>(int numberOfChanges) where T : MyBase
{
    IEnumerable<ItemChange<Object1>> obj1Changes= GetChanges<Object1>();
    IEnumerable<ItemChange<Object2>> obj1Changes= GetChanges<Object2>();
    return obj1Changes.Concat(obj2Changes).OrderByDescending(r => r.When).Take(numberofChanges);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我需要连接多种类型的更改,但随后我想获取最新数量的更改(由 定义numberOfChanges)

关于如何让下面的代码工作的任何建议,因为 Concat 行都会给我一个编译器错误(我假设我必须以某种特殊的方式进行转换才能使其工作)。

有什么办法可以做到这一点吗?

c# generics collections

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

构造函数链接传递参数的计算值

我怎样才能从一个实例化器传递到另一个实例器?假设我们有这门课.如何从foo(字符串,字符串)传递给foo(Uri)?

public foo
{
   string path { get; private set; }
   string query { get; private set; }

   public foo (Uri someUrl)
   {
      // ... do stuff here
   }

   public foo (string path, string query)
   {
      Uri someUrl = new Uri(String.Concat(path, query);

      // ... do stuff here to pass thru to foo(someUrl)
   }
}
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
2
解决办法
575
查看次数

使用CodeIgniter加载视图文件夹外部的视图

我需要从以下范围之外加载视图:

$this->load->view();
Run Code Online (Sandbox Code Playgroud)

这似乎是从base/application/views目录工作.如何从/application/目录外部访问视图?

我想我将不得不延长CI_Loader class这将是最好的前进方式吗?

我还找到了包含view_paths的数组:

// base/system/core/Loader.php 
// CI_Loader 
 /**
 * List of paths to load views from
 *
 * @var array
 * @access protected
 */
protected $_ci_view_paths       = array();
Run Code Online (Sandbox Code Playgroud)

但是所有声明的变量上面的注释让我陷入困境

// All these are set automatically. Don't mess with them.
Run Code Online (Sandbox Code Playgroud)

关于从哪里去的任何想法将不胜感激:-)

php codeigniter autoload

5
推荐指数
2
解决办法
2万
查看次数

标签滚动效果

我使用一个标签,其中从文本框中输入的文本显示在该标签中。现在,我想让标签文本滚动。我通过互联网环顾四周,并尝试将其写入标签内的代码中:

private void label1_Click(object sender, EventArgs e)
{
    int Scroll;
    string strString = "This is scrollable text...This is scrollable text...This is scrollable text";

    Scroll = Scroll + 1;
    int iLmt = strString.Length - Scroll;
    if (iLmt < 20)
    {
        Scroll = 0;
    }
    string str = strString.Substring(Scroll, 20);
    label1.Text = str;
}
Run Code Online (Sandbox Code Playgroud)

有没有人看到我做错了什么?

c# label scroll winforms

4
推荐指数
1
解决办法
2万
查看次数

GetWindowLong/SetWindowLong vs重写CreateParams?

以前当我想创建一个点击式表单时,我很想使用平台调用来设置扩展窗口样式(GetWindowLong/ SetWindowLongin user32.dll).

刚才我想让它对Alt + Tab窗口列表不可见,我发现了一个覆盖CreateParams设置扩展窗口样式而不是使用GetWindowLong/ 的示例SetWindowong.

现在我有这个:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x80000 /* WS_EX_LAYERED */ | 0x20 /* WS_EX_TRANSPARENT */ | 0x80/* WS_EX_TOOLWINDOW */;
        return cp;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在明显的变化不需要任何平台调用.

所以我的几个问题:

  1. Windows上是否存在任何功能差异?(只是说我现在还没有XP机器可以尝试.)
  2. 现在我没有平台调用,我的程序会在Linux/Mac上的Mono上运行吗?(如果我现在可以尝试,我不会在这里问你.)
  3. Control.CreateParams出现在msdn上,并有一个操作窗口样式的例子.那么为什么StackOverflow上的一些在线"示例"和答案会告诉人们使用GetWindowLong/ SetWindowLong?

c# winforms

4
推荐指数
1
解决办法
1932
查看次数

使用查找表线性"平滑"功能

如果我想编写一个函数(可能也是一个类),它从不可变的查找表(在调用构造函数时修复)返回线性"平滑"的数据,如下所示: 查找表和结果的示例

例如func(5.0) == 0.5.


  1. 存储查找表的最佳方法是什么?

    • 我在考虑使用两个数组.
    • 还有其他更好的方法吗?
       
  2. 计算所需值的最佳方法是什么?(在实时效率方面,不包括准备时间)

    • 我正在考虑对查找表进行预排序arg并使用二进制搜索来查找最近的两个点.
    • 或者我应该构建二叉树来简化搜索?
    • 或者还有其他更好的方法吗?
       
  3. (次要)人们会称这种函数/类/数据结构/算法是什么?计算机科学中是否有正式名称?

我想我可能需要写自己的课.该类充其量应该是不可变的,因为在初始化之后不需要更改它,并且可能多个线程将使用它.我可能还需要通过索引获取键和值.

java data-structures

4
推荐指数
1
解决办法
457
查看次数