小编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)

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

我现在正在尝试让它工作,我获得跨多个对象的更改列表,然后将几种不同类型的 T 列表连接到一个数组中,如下所示(注意:两者Object1Object2源自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
查看次数