Feeds:
文章
迴響

Archive for the ‘C/C++’ Category

今天我就把 byte array 用 strncpy 複製…. 想說怎麼有時候會失敗. 萬惡的 \0 啊…

 

Read Full Post »

系統環境

  • Windows 7(64bits)
  • Python 2.7.2
  • Node 0.8.9
  • Visual Studio 2012

 

目錄結構

– binding.gyp
– hello.cc
– test.js
+ build
    + Release
        – hello.node

 

hello.cc

#include <node.h>
#include <v8.h>

using namespace v8;

Handle<Value> MethodArgs(const Arguments& args) {
HandleScope scope;

printf(“%d\n", args.Length());

if (args[0]->IsString() && args[1]->IsNumber() &&
args[2]->IsNumber() && args[3]->IsBoolean()) {

printf(“%s %d %f %d\n",
*String::AsciiValue(args[0]->ToString()),
args[1]->ToInteger()->Value(),
args[2]->NumberValue(),
args[3]->ToBoolean());

}

return scope.Close(Undefined());
}

Handle<Value> Add(const Arguments& args) {
HandleScope scope;

if (args.Length() < 2) {
ThrowException(Exception::TypeError(String::New(“Wrong number of arguments")));
return scope.Close(Undefined());
}

if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
ThrowException(Exception::TypeError(String::New(“Wrong arguments")));
return scope.Close(Undefined());
}

Local<Number> num = Number::New(args[0]->NumberValue() +
args[1]->NumberValue());
return scope.Close(num);
}

Handle<Value> Method(const Arguments& args) {
HandleScope scope;

printf(“%d\n", args.Length());

if (args[0]->IsString() && args[1]->IsNumber() &&
args[2]->IsNumber() && args[3]->IsBoolean()) {

printf(“%s %d %f %d\n",
*String::AsciiValue(args[0]->ToString()),
args[1]->ToInteger()->Value(),
args[2]->NumberValue(),
args[3]->ToBoolean());

}

return scope.Close(String::New(“world"));
}

void init(Handle<Object> target) {
NODE_SET_METHOD(target, “hello“, Method);
NODE_SET_METHOD(target, “add“, Add);
NODE_SET_METHOD(target, “testArgs“, MethodArgs);
}

NODE_MODULE(hello, init)

 

 

binding.gyp

{
“targets": [
{
“target_name": “hello",
“sources": [ “hello.cc" ]
}
]
}

test.js

var hello_module = require(‘./build/Release/hello.node’);
console.log(hello_module.hello());
console.log(hello_module.add(99, 1));
console.log(hello_module.testArgs(‘str’, 100, 300, true));

 

 

初始

node “C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" configure

編譯

node “C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" build

測試

node test.js

執行結果

參考資料

[1] http://snoopyxdy.blog.163.com/blog/static/601174402012102391344617/

Read Full Post »

Judge Onilne 1045 的解答

今天發現一個好玩的網站 Judge Online,裡面有許多程式問題可以來測驗一下你的功力,我今天嘗試解了 1045 ,有興趣的人可以參考看看
 

/*
 * Judge Online 1045 解答
 *
 * 問題描述:http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=1045
 * 設計者:Chui-Wen Chiu
 * 開發環境:VC6+Win2K Pro
 * 開發日誌:
 * 2005.10.20 建立
 */
#include <iostream>
#include <cmath>
#include <cstdio>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
int main(){
 double vs, c, r, w, xc;
 int i,n;
 double* vr = 0; 
 char  buffer[32];
 cin >> vs >> r >> c >> n; 
 if (n>0){
  vr = new double[n];
 }else{
  cout << "no data" << endl;
  return 0;
 }
 for(i=0; i<n; ++i){
  cin >> w;
  if (r == 0 && w == 0 && c == 0){
   cerr << "warning: divide by 0" << endl;
   –i;
   continue;
  }else{
   xc = 1.0f/(w*c);  
   vr[i] = r*vs/(sqrt(r*r + xc*xc ));
  }
 } 
 for(i=0; i<n; ++i){
  sprintf(buffer, "%.3f", vr[i]);
  cout << buffer << endl;
 } 
 if (vr != 0){
  delete []vr;
 }
 return 0;
}
 

Read Full Post »

組語模擬 strlen 函數

雖然今天對於工作上有點不太愉快的事情發生,不過還是不會影響我最近研究組語的熱情,今天寫了一個模擬計算字串長度的函數,如下:
 
#include <string>
#include <iostream>
 
int strlen2(const char* pstr){ 
  __asm{ 
  mov ebx, 0               ; iterator
for: 
  mov edx, pstr;
  mov al, [edx][ebx]     ;
  inc ebx                     ;
  cmp al, 0                  ;
  jnz for
  mov eax, ebx            ;

  }
}
void main(void){
  const char str[] = "Hello Arick";
  std::string hello(str);
  const char* pstr = str;
  std::cout << strlen( hello.c_str() ) << ","
    << strlen2( hello.c_str() )
    << std::endl;
  std::cout << strlen( str ) << ","
    << strlen2( str )
    << std::endl;
  std::cout << strlen( str ) << ","
    << strlen2( pstr )
    << std::endl;
}
 
 

Read Full Post »

組語 1+2+3+…10

一層迴圈測試

 

#include <iostream>
void main( void )
{
 // 1+2+3+…+10 = 55
 int sum;
 __asm{  
  mov eax, 0  ;
  mov ecx, 1  ;
for:
  add eax, ecx ;  
  inc ecx   ;
  cmp ecx, 10+1 ;  
  jnz for   ;
  mov sum, eax;  
 }
 std::cout << sum;
}

Read Full Post »

終於找到 intel x86 的手冊

最近在玩組語,可惜缺少指令集,今天查找資料的時候終於找到官方手冊,有興趣的人可以到 http://support.intel.com/design/pentiumii/manuals/243191.htm 下載

Read Full Post »

VC 用組語初始化字元陣列

char 資料型態的長度為 1byte,所以使用 BYTE PTR

 

void main( void )
{
 char msg[6];

 __asm{
  mov BYTE PTR msg,   104   ; h
  mov BYTE PTR msg+1, 101 ; e
  mov BYTE PTR msg+2, 108 ; l
  mov BYTE PTR msg+3, 108 ; l
  mov BYTE PTR msg+4, 111 ; o
  mov BYTE PTR msg+5, 0    ;
 }

 std::cout << msg << std::endl ; 
}

Read Full Post »

Older Posts »