質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

259閲覧

JavaScriptのコードを、C#に翻訳したいです。

nomurax

総合スコア32

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/11/25 09:30

###前提・実現したいこと
JavaScriptで書いてあるpngを読むコードを、C#に翻訳したいです。
C#はすこし読めますが、JavaScriptはぜんぜん読めません。

###発生している問題・エラーメッセージ
困っているのは、下記コードで、ReadFileしたあとbyte[]で戻した値を、SplitChunkにstringで渡すところです。
SplitChunkでbyte[]で受けて、それを8つごとにjoinしたほうが、コードが単純になるように思うのです。
どのように書けばよいか、ご教示お願いします。

###該当のソースコード

javascript

1// ライブラリの取り込み 2var pngm = require('./png-metadata'); 3// PNGファイルの読み込み 4var tmp = pngm.readFileSync("test.png"); 5// ファイルの内容をチャンクに分割 6var list = pngm.splitChunk(tmp); 7for (var i in list) { 8 var chunk = list[i]; 9 //チャンクサイズとタイプを表示 10 console.log(chunk.size, chunk.type); 11}

png-metadata

javascript

1var metadata = {}; 2module.exports = metadata; 3 4var fs = require('fs'); 5 6metadata.PNG_SIG = String.fromCharCode(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a); 7 8// read pngfile by binary 9metadata.readFileSync = function (path) { 10 var buf = fs.readFileSync(path, "binary"); 11 return buf; 12}; 13metadata.writeFileSync = function (path, bin) { 14 fs.writeFileSync(path, bin, "binary"); 15}; 16 17// check PNG signature 18metadata.isPNG = function (s) { 19 var sig = s.substr(0, 8); 20 return (sig == metadata.PNG_SIG); 21}; 22 23metadata.splitChunk= function (s) { 24 // read signature 25 var sig = s.substr(0, 8); 26 if (!metadata.isPNG(sig)) return false; 27 s = s.substr(8); // chomp sig 28 var chunklist = []; 29 // read chunk list 30 while (s != '') { 31 var chunk = {}; 32 // read chunk size 33 var size = stoi(s.substr(0, 4)); 34 var buf = s.substr(0, size + 12); 35 s = s.substr(size + 12); // delete this chunk 36 // read chunk data 37 chunk.size = size; 38 chunk.type = buf.substr(4, 4); 39 chunk.data = buf.substr(8, size); 40 chunk.crc = stoi(buf.substr(8 + size, 4)); 41 // add chunk 42 chunklist.push(chunk); 43 } 44 return chunklist; 45}; 46 47metadata.stoi = stoi; 48function stoi(s) { 49 var v = 0; 50 for (var i = 0; i < s.length; i++) { 51 var c = s.charCodeAt(i); 52 v = (v << 8) | (c & 0xFF); 53 } 54 return v; 55} 56

C#

1using System; 2using System.Collections.Generic; 3using System.IO; 4 5namespace ImagePng 6{ 7 public class Png 8 { 9 private void readpng (string path){ 10 // PNGファイルの読み込み 11 var tmp = ReadFile(path); 12 // ファイルの内容をチャンクに分割 13 var list = SplitChunk(tmp.ToString()); 14 foreach (var i in list) 15 { 16 var chunk = list[i]; 17 //チャンクサイズとタイプを表示 18 Console.WriteLine(chunk.Size + chunk.Type); 19 } 20 } 21 22 23 static string[] PNG_SIGs = new string[]{"0x89", "0x50", "0x4e", "0x47", "0x0d", "0x0a", "0x1a", "0x0a"}; 24 string PNG_SIG = string.Join("", PNG_SIGs); 25 26 public byte[] ReadFile(string path) 27 { 28 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); 29 byte[] bytes = new byte[fs.Length]; 30 fs.Read(bytes, 0, bytes.Length); 31 fs.Close(); 32 return bytes; 33 } 34 35 public List<Chunk> SplitChunk(string s) 36 { 37 var sig = s.Substring(0, 8); 38 if (!isPNG(sig)) return null; 39 s = s.Substring(8); // chomp sig 40 var chunklist = new List<Chunk>(); 41 // read chunk list 42 while (s != "") 43 { 44 var chunk = new Chunk(); 45 // read chunk size 46 var size = stoi(s.Substring(0, 4)); 47 var buf = s.Substring(0, size + 12); 48 s = s.Substring(size + 12); // delete this chunk 49 // read chunk data 50 chunk.Size = size; 51 chunk.Type = buf.Substring(4, 4); 52 chunk.Data = buf.Substring(8, size); 53 chunk.Crc = stoi(buf.Substring(8 + size, 4)); 54 // add chunk 55 chunklist.Add(chunk); 56 } 57 return chunklist; 58 } 59 60 private int stoi(string s) 61 { 62 var v = 0; 63 for (var i = 0; i < s.Length; i++) 64 { 65 var c = s[i]; 66 v = (v << 8) | (c & 0xFF); 67 } 68 return v; 69 } 70 71 // check PNG signature 72 private bool isPNG(string s) { 73 var sig = s.Substring(0, 8); 74 return (sig == PNG_SIG); 75 } 76 } 77 78 public class Chunk 79 { 80 public int Size; 81 public string Type; 82 public string Data; 83 public int Crc; 84 } 85}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/26 05:26

> JavaScriptはぜんぜん読めません ← それにもかかわらず、質問に書かれている JavaScript のコードが質問者さんのやりたいことというのはどうしてわかったのでしょう? JavaScript や C# のコードではなく、言葉で何がしたいのか全体的なシナリオ・ストーリーを含めて書いていただけませんか。あと、開発環境も書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問